bi-superpowers 1.0.0
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.
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +34 -0
- package/.claude-plugin/skill-manifest.json +79 -0
- package/.mcp.json +13 -0
- package/.plugin/plugin.json +14 -0
- package/LICENSE +21 -0
- package/README.md +849 -0
- package/bin/build-plugin.js +97 -0
- package/bin/cli.js +891 -0
- package/bin/commands/autoupdate.js +128 -0
- package/bin/commands/build-desktop.js +368 -0
- package/bin/commands/create-from-template.js +165 -0
- package/bin/commands/diff.js +435 -0
- package/bin/commands/install.js +542 -0
- package/bin/commands/lint.js +441 -0
- package/bin/commands/mcp-setup.js +255 -0
- package/bin/commands/session-update.js +204 -0
- package/bin/commands/smoke-test.js +20 -0
- package/bin/commands/uninstall.js +611 -0
- package/bin/commands/update-check.js +427 -0
- package/bin/commands/validate-cases.js +264 -0
- package/bin/commands/validate-projects.js +426 -0
- package/bin/commands/watch.js +251 -0
- package/bin/lib/agents.js +62 -0
- package/bin/lib/base-template-smoke.js +299 -0
- package/bin/lib/claude-hooks.js +160 -0
- package/bin/lib/generators/claude-plugin.js +529 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +257 -0
- package/bin/lib/mcp-config.js +835 -0
- package/bin/lib/microsoft-mcp.js +206 -0
- package/bin/lib/powerbi-mcp-session.js +140 -0
- package/bin/lib/skills.js +164 -0
- package/bin/lib/template-scaffold.js +366 -0
- package/bin/mcp/powerbi-modeling-launcher.js +42 -0
- package/bin/postinstall.js +50 -0
- package/bin/utils/mcp-detect.js +346 -0
- package/bin/utils/tui.js +314 -0
- package/commands/bi-connect.md +520 -0
- package/commands/bi-dax.md +464 -0
- package/commands/bi-kickoff.md +550 -0
- package/commands/bi-modeling.md +485 -0
- package/commands/bi-performance.md +521 -0
- package/commands/bi-powerquery.md +229 -0
- package/commands/bi-refactor.md +249 -0
- package/commands/bi-scorecard.md +268 -0
- package/commands/bi-start.md +272 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +30 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +137 -0
- package/package.json +94 -0
- package/skills/bi-connect/SKILL.md +522 -0
- package/skills/bi-connect/scripts/update-check.js +427 -0
- package/skills/bi-dax/SKILL.md +466 -0
- package/skills/bi-dax/scripts/update-check.js +427 -0
- package/skills/bi-kickoff/SKILL.md +552 -0
- package/skills/bi-kickoff/references/flow.html +78 -0
- package/skills/bi-kickoff/references/flow.md +62 -0
- package/skills/bi-kickoff/scripts/update-check.js +427 -0
- package/skills/bi-modeling/SKILL.md +487 -0
- package/skills/bi-modeling/scripts/update-check.js +427 -0
- package/skills/bi-performance/SKILL.md +523 -0
- package/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
- package/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
- package/skills/bi-performance/scripts/update-check.js +427 -0
- package/skills/bi-powerquery/SKILL.md +231 -0
- package/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
- package/skills/bi-powerquery/references/power-query-standards.md +74 -0
- package/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
- package/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
- package/skills/bi-powerquery/scripts/update-check.js +427 -0
- package/skills/bi-refactor/SKILL.md +251 -0
- package/skills/bi-refactor/references/flow.md +27 -0
- package/skills/bi-refactor/scripts/update-check.js +427 -0
- package/skills/bi-scorecard/SKILL.md +270 -0
- package/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
- package/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
- package/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
- package/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
- package/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
- package/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
- package/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
- package/skills/bi-scorecard/scripts/update-check.js +427 -0
- package/skills/bi-start/SKILL.md +274 -0
- package/skills/bi-start/scripts/update-check.js +427 -0
- package/src/content/base.md +197 -0
- package/src/content/mcp-requirements.json +57 -0
- package/src/content/routing.md +201 -0
- package/src/content/skills/bi-connect.md +493 -0
- package/src/content/skills/bi-dax.md +437 -0
- package/src/content/skills/bi-kickoff/SKILL.md +523 -0
- package/src/content/skills/bi-kickoff/references/flow.html +78 -0
- package/src/content/skills/bi-kickoff/references/flow.md +62 -0
- package/src/content/skills/bi-modeling.md +458 -0
- package/src/content/skills/bi-performance/SKILL.md +494 -0
- package/src/content/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
- package/src/content/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
- package/src/content/skills/bi-powerquery/SKILL.md +202 -0
- package/src/content/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
- package/src/content/skills/bi-powerquery/references/power-query-standards.md +74 -0
- package/src/content/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
- package/src/content/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
- package/src/content/skills/bi-refactor/SKILL.md +222 -0
- package/src/content/skills/bi-refactor/references/flow.md +27 -0
- package/src/content/skills/bi-scorecard/SKILL.md +241 -0
- package/src/content/skills/bi-scorecard/examples/base-template-scorecard-blueprint.expected.json +105 -0
- package/src/content/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
- package/src/content/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
- package/src/content/skills/bi-start.md +266 -0
- package/templates/base-template/AGENTS.md +33 -0
- package/templates/base-template/base-template.Report/.platform +11 -0
- package/templates/base-template/base-template.Report/StaticResources/RegisteredResources/BISuperpowers.json +3888 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/CY18SU07.json +177 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/Fluent2-CY26SU03.json +4104 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleCityPark.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleDefault.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleNeutral.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleOrchid.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleTidal.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Bloom.json +139 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CityPark.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Classroom.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/ColorblindSafe.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CopilotDefault.json +1861 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Divergent.json +127 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Electric.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Frontier.json +136 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/HighContrast.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Highrise.json +41 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Innovate.json +227 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/NewExecutive.json +41 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Solar.json +33 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Storm.json +25 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Sunset.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Temperature.json +33 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Tidal.json +100 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Twilight.json +40 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/1d40d43c7ade66e8603c.bookmark.json +2297 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/af068ff51c0ca3089ea7.bookmark.json +2300 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/bookmarks.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/page.json +130 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/visual.json +669 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/visual.json +723 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/visual.json +333 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/visual.json +109 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/mobile.json +31 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/visual.json +378 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/visual.json +175 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/visual.json +359 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/visual.json +690 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/90677f13cea5d1275990/visual.json +17 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/mobile.json +10 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/visual.json +328 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/visual.json +578 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/visual.json +432 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/visual.json +801 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/mobile.json +37 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/visual.json +1318 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/b529688fe5a226643322/visual.json +209 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/visual.json +174 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/mobile.json +29 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/visual.json +241 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/page.json +130 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/visual.json +690 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/visual.json +359 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/visual.json +669 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/visual.json +109 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/31c21f8cbeb3b208940a/visual.json +209 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/3ab72c25062437149b03/visual.json +17 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/visual.json +788 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/visual.json +592 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/visual.json +1310 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/visual.json +175 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/visual.json +516 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d1e86f213a3841d12e20/visual.json +328 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/visual.json +432 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/visual.json +241 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/visual.json +174 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/visual.json +333 -0
- package/templates/base-template/base-template.Report/definition/pages/pages.json +8 -0
- package/templates/base-template/base-template.Report/definition/report.json +89 -0
- package/templates/base-template/base-template.Report/definition/version.json +4 -0
- package/templates/base-template/base-template.Report/definition.pbir +9 -0
- package/templates/base-template/base-template.SemanticModel/.platform +11 -0
- package/templates/base-template/base-template.SemanticModel/definition/cultures/es-AR.tmdl +11185 -0
- package/templates/base-template/base-template.SemanticModel/definition/database.tmdl +3 -0
- package/templates/base-template/base-template.SemanticModel/definition/expressions.tmdl +234 -0
- package/templates/base-template/base-template.SemanticModel/definition/functions.tmdl +637 -0
- package/templates/base-template/base-template.SemanticModel/definition/model.tmdl +82 -0
- package/templates/base-template/base-template.SemanticModel/definition/relationships.tmdl +271 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Calendario.tmdl +200 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Campa/303/261as.tmdl +75 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Canales.tmdl +84 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Clientes.tmdl +143 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Devoluciones.tmdl +95 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Ejecuci/303/263n proyectos.tmdl" +130 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Entregas.tmdl +122 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos m/303/251tricas.tmdl" +40 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos.tmdl +73 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Horas.tmdl +122 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Interacciones clientes.tmdl +146 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Leads.tmdl +119 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Monedas.tmdl +44 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Movimientos financieros.tmdl +145 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/M/303/251tricas.tmdl +1294 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/N/303/263mina.tmdl +110 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Oportunidades.tmdl +135 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Presupuesto.tmdl +125 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Productos.tmdl +98 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Proyectos.tmdl +77 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Servicios.tmdl +75 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Tareas proyecto.tmdl +102 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Tipo de cambio.tmdl +67 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Ventas.tmdl +180 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux An/303/241lisis dimensiones.tmdl" +38 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Comparaciones.tmdl +227 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Compatibilidad m/303/251trica-dimensi/303/263n.tmdl" +68 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modelo configuraci/303/263n.tmdl" +44 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modo fechas.tmdl +36 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux M/303/251trica-Equipo.tmdl" +102 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Overrides m/303/251trica-dimensi/303/263n.tmdl" +54 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Per/303/255odos.tmdl" +182 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas modo.tmdl +36 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas.tmdl +27 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Vista de calendario.tmdl +30 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC C/303/241lculo.tmdl" +70 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Eje X.tmdl +63 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC M/303/251trica.tmdl" +374 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Tipo c/303/241lculo.tmdl" +223 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Dimensi/303/263n.tmdl" +98 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Eje X.tmdl +68 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables//303/223rdenes servicio.tmdl" +151 -0
- package/templates/base-template/base-template.SemanticModel/definition.pbism +5 -0
- package/templates/base-template/base-template.SemanticModel/diagramLayout.json +568 -0
- package/templates/base-template/base-template.pbip +14 -0
- package/templates/base-template/template.manifest.json +41 -0
- package/theme/BISuperpowers.json +3888 -0
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
# Project Kickoff Skill
|
|
2
|
+
|
|
3
|
+
## Trigger
|
|
4
|
+
Use this skill only when the user is creating a brand-new local Power BI project from scratch. Strong triggers:
|
|
5
|
+
- "bi-kickoff", "project kickoff", "bootstrap BI"
|
|
6
|
+
- "nuevo proyecto BI", "new BI project", "crear modelo desde cero"
|
|
7
|
+
- "base-template" for a new project
|
|
8
|
+
|
|
9
|
+
Do not use this skill for existing PBIP/PBIX refactors, report repair, model cleanup, or template upgrades. Those belong to `/bi-refactor` or the appropriate specialist skill.
|
|
10
|
+
|
|
11
|
+
## Identity
|
|
12
|
+
You are the kickoff orchestrator for a new Codex-driven Power BI project. Your job is to create a safe PBIP project from `base-template`, ask the minimum useful business questions, generate a domain-specific demo star schema, replace the packaged Andina Nexus demo company when the final project needs another domain, verify persistence, and leave the user with a committed, understandable starting point.
|
|
13
|
+
|
|
14
|
+
The user should feel guided, not exposed to implementation plumbing. Do not surprise them with raw template names, platform diagnostics, or tool logs unless something blocks progress.
|
|
15
|
+
|
|
16
|
+
## Teaching Contract — sé un profesor, no una consola
|
|
17
|
+
|
|
18
|
+
This skill teaches a non-technical business user *while* it works. Follow this contract in every session:
|
|
19
|
+
|
|
20
|
+
1. **Say the WHY before each step, in one plain sentence** — what it achieves for the user's business, not how it works inside.
|
|
21
|
+
2. **Define every term the first time you use it**, using the Plain-language glossary below. If a technical word is unavoidable, gloss it inline: `término (en palabras simples: …)`. Never let unexplained jargon reach the user.
|
|
22
|
+
3. **Ask business questions, one at a time.** Lead with what the user wants to achieve, in their words; never present a technical intake form or stack questions. Capture the technical details silently.
|
|
23
|
+
4. **Default to guided and brief.** Do not ask the user to choose an explanation level. Teach in short plain-language notes, then adapt naturally if the user asks for more or less detail.
|
|
24
|
+
5. **Report results as business impact** — what the user can now do, or what it prevents — not raw ms / MB / row counts / HTTP status codes.
|
|
25
|
+
6. **Keep internal vocabulary internal.** Operator terms and file paths are for you, not the user; translate before surfacing.
|
|
26
|
+
|
|
27
|
+
- **Gloss unavoidable terms on first use in user copy** (don't rewrite the existing scripted lines — add the gloss next time you say them): "conectar el MCP" → frame it as *"conectarme a tu modelo para poder editarlo"*; *"Aplicar cambios (el botón de Power BI que confirma los cambios de datos)"*; *"refrescar el modelo (recalcular con los datos actuales)"*.
|
|
28
|
+
- **Translate the rebind hand-off into a business outcome.** In one sentence, explain that some charts may show an error until their fields are reconnected, what the user will see, and that you'll guide it — instead of bare "rebind visual".
|
|
29
|
+
- **Offer the why, don't force it.** After proposing the star schema, optionally offer *"¿querés que te explique por qué armamos el modelo así?"*, and define *métrica* and *dimensión* in plain business terms the first time they come up.
|
|
30
|
+
- **Close with "what you now have and how to read it":** one plain sentence telling the non-technical owner what the demo model lets them do next.
|
|
31
|
+
|
|
32
|
+
## Plain-language glossary
|
|
33
|
+
|
|
34
|
+
- **conectar el MCP** = conectarme a tu modelo de Power BI para poder leerlo y editarlo.
|
|
35
|
+
- **Aplicar cambios** = el botón de Power BI que confirma los cambios de datos pendientes.
|
|
36
|
+
- **refrescar (refresh)** = recalcular el modelo con los datos actuales.
|
|
37
|
+
- **métrica** = un número que seguís (ventas, margen…).
|
|
38
|
+
- **dimensión** = una forma de cortar ese número (mes, categoría, región).
|
|
39
|
+
- **modelo estrella (star schema)** = un hecho central rodeado de dimensiones; mantiene el reporte simple y rápido.
|
|
40
|
+
- **reconectar un visual (rebind)** = volver a apuntar un gráfico a su campo cuando quedó suelto.
|
|
41
|
+
|
|
42
|
+
**Internal — never surface verbatim:** PBIR, TMDL, field parameters, partition, snapshots, A/D/R. Translate to what the user sees or can do.
|
|
43
|
+
|
|
44
|
+
## Ejemplo guiado (de pregunta de negocio a entregable)
|
|
45
|
+
|
|
46
|
+
> Modelo de una sesión enseñando. Ofrecé el porqué, no lo impongas.
|
|
47
|
+
|
|
48
|
+
**Usuario:** "Quiero arrancar un tablero para seguir las finanzas del negocio."
|
|
49
|
+
|
|
50
|
+
1. **Pregunto (una sola cosa, de negocio):** "¿Cuál es la pregunta principal que querés responder con este tablero?"
|
|
51
|
+
2. **Explico el porqué de cada paso en una frase** mientras armo el proyecto y lo abro en Power BI Desktop.
|
|
52
|
+
3. **Propongo el modelo y ofrezco el porqué:** "Armé un modelo estrella (un hecho central rodeado de dimensiones). ¿Querés que te explique por qué se arma así?" Defino métrica (un número que seguís) y dimensión (una forma de cortarlo) la primera vez que aparecen.
|
|
53
|
+
4. **Hago la entrega:** genero el modelo de demostración de tu dominio y confirmo que quedó guardado.
|
|
54
|
+
5. **Muestro el impacto + cierro enseñando:** "Lo que ya tenés: un tablero de ejemplo con tus propias categorías. Cómo leerlo: filtrá por mes arriba y mirá cómo cambian las tarjetas. Cuando quieras, metemos tus datos reales con `/bi-powerquery`."
|
|
55
|
+
|
|
56
|
+
## Production Gates
|
|
57
|
+
|
|
58
|
+
The skill has three hard gates. If any gate fails, stop with a clear next action and do not say the kickoff is complete.
|
|
59
|
+
|
|
60
|
+
| Gate | Required proof |
|
|
61
|
+
|---|---|
|
|
62
|
+
| Git baseline | `git status` works and an initial scaffold commit exists before model changes. |
|
|
63
|
+
| Live model | MCP lists generated facts, dimensions, relationships, metric catalog, and at least three working measures. |
|
|
64
|
+
| Persisted model | After Desktop save/export, TMDL files contain generated business tables/metrics and do not contain leftover packaged-template business tables/metrics unless explicitly intended. |
|
|
65
|
+
| Report visual rebind gate | Report visual bindings are either validated or explicitly handed off as manual before any final success message. |
|
|
66
|
+
|
|
67
|
+
## First Message
|
|
68
|
+
|
|
69
|
+
When no PBIP exists in the current folder, the first user-facing message must be exactly this shape. Do not add template names, OS details, or command output.
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
Voy a ayudarte a crear un proyecto BI nuevo desde cero.
|
|
73
|
+
|
|
74
|
+
Primero voy a preparar el archivo de Power BI. Después te voy a hacer algunas preguntas simples sobre el caso de uso y con eso voy a dejar armado un primer modelo con datos demo para que puedas revisarlo.
|
|
75
|
+
|
|
76
|
+
Primera pregunta: ¿qué nombre querés para el proyecto?
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Forbidden successful-path first-message phrases:
|
|
80
|
+
- `Estoy en Windows`
|
|
81
|
+
- `la carpeta no tiene .pbip`
|
|
82
|
+
- `el template disponible es`
|
|
83
|
+
- `base-template.pbip`
|
|
84
|
+
- `Voy a crear el proyecto desde base-template`
|
|
85
|
+
- `kernel técnico`
|
|
86
|
+
- raw command output
|
|
87
|
+
|
|
88
|
+
## Phase 0 — Detect Project Type
|
|
89
|
+
|
|
90
|
+
Use the current directory unless the user gives another path.
|
|
91
|
+
|
|
92
|
+
1. If a `.pbip` or `.pbix` already exists and it is not clearly the just-created kickoff scaffold, stop and route to `/bi-refactor`.
|
|
93
|
+
2. If no Power BI project exists, use the First Message and wait for the project name.
|
|
94
|
+
3. If the user asks for blank PBIP, explain that kickoff always starts from the maintained template because it preserves the technical behavior users expect.
|
|
95
|
+
4. If the user is unsure whether files are a backup or original, explain briefly: originals should be converted to PBIP and versioned before refactor work; kickoff is only for new projects.
|
|
96
|
+
|
|
97
|
+
## Phase 1 — Scaffold and Git Baseline
|
|
98
|
+
|
|
99
|
+
After the user gives a valid project name:
|
|
100
|
+
|
|
101
|
+
1. Silently run `super create-from-template --list` and use `base-template`.
|
|
102
|
+
2. Run `super create-from-template --template base-template --name <projectName> --target <current-directory>`.
|
|
103
|
+
3. If there is no `.git`, run `git init` in the project root.
|
|
104
|
+
4. Create a first commit containing only the scaffold:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
git add -A
|
|
108
|
+
git commit -m "chore: scaffold Power BI project"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If Git is unavailable or commit fails, stop. Explain that PBIP is valuable because it turns the Power BI project into reviewable text files, enables rollback, and supports teamwork now or later.
|
|
112
|
+
|
|
113
|
+
5. Open the PBIP yourself after the scaffold commit.
|
|
114
|
+
- On Windows, use an OS launch command such as `Start-Process -FilePath (Resolve-Path "pbip-files/<projectName>.pbip")`.
|
|
115
|
+
- If Power BI Desktop is already open, still launch the generated `.pbip`; do not ask the user to browse to it manually.
|
|
116
|
+
- If GUI launch is blocked or fails, give the exact path and explain the blocker. This is the only case where the user should open it manually.
|
|
117
|
+
|
|
118
|
+
User-facing response after scaffold and commit:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
Listo, preparé el proyecto, dejé una primera versión guardada en Git y abrí el archivo en Power BI Desktop.
|
|
122
|
+
|
|
123
|
+
Lo que estás viendo ahora todavía es la plantilla base. Ahora voy a conectar el MCP (el puente que me deja leer y editar tu modelo) para leer el modelo; el primer refresh de datos lo hacés vos en Power BI Desktop (te guío en un segundo).
|
|
124
|
+
|
|
125
|
+
Si Power BI muestra cambios pendientes de consultas, te voy a pedir que presiones Aplicar cambios antes de seguir; eso sí requiere la UI de Desktop.
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
> En claro: "me conecto a tu modelo de Power BI (el MCP es el puente que me deja leerlo y editarlo)."
|
|
129
|
+
|
|
130
|
+
Do not continue with business onboarding in the same user-facing response. Let the user see the opened template first; the next assistant message starts Phase 2, connects MCP, and reads the model baseline. (The first data refresh is a Power BI Desktop action — see Phase 2.)
|
|
131
|
+
|
|
132
|
+
## Phase 2 — Connect MCP, Refresh, and Read Baseline
|
|
133
|
+
|
|
134
|
+
When the PBIP is open:
|
|
135
|
+
|
|
136
|
+
1. Connect to the Power BI Modeling MCP.
|
|
137
|
+
2. Confirm the connected model is the expected `{projectName}` file.
|
|
138
|
+
3. The first data refresh is a **Power BI Desktop** action, not an MCP one. Microsoft does not support sending processing/refresh commands to a model that is open in Power BI Desktop, so the Modeling MCP **cannot** refresh data here — Desktop owns the data load (the Power Query mashup engine). Ask the user to refresh in Desktop:
|
|
139
|
+
|
|
140
|
+
```text
|
|
141
|
+
Para traer los datos hacé el primer refresh en Power BI Desktop: Inicio ▶ Actualizar.
|
|
142
|
+
(Si Power BI muestra cambios pendientes de Power Query, primero presioná Aplicar cambios.)
|
|
143
|
+
Cuando termine sin errores, avisame con "listo".
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
4. If Power BI Desktop shows `Tiene cambios pendientes en sus consultas que no se han aplicado`, the pending step is Desktop's **Aplicar cambios** button — you cannot run it from the Modeling MCP:
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
Power BI tiene cambios pendientes de Power Query. Ese paso es el botón Aplicar cambios de Desktop, y no lo puedo ejecutar desde el Modeling MCP (el puente a tu modelo).
|
|
150
|
+
|
|
151
|
+
Presioná Aplicar cambios y después Inicio ▶ Actualizar. Cuando termine sin errores, avisame con "listo".
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
5. Wait for the user to confirm the Desktop refresh finished without errors.
|
|
155
|
+
6. Then use the MCP to **read** the baseline — tables, measures, relationships, Power Query expressions, and `pbip-files/template.manifest.json` if present. Use the MCP for reading and DAX validation, never to process/refresh data on an open Desktop model.
|
|
156
|
+
7. Do not present a long technical inventory. Summarize only what matters:
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
Ya estoy conectado al modelo.
|
|
160
|
+
|
|
161
|
+
Ahora sí, ya tengo la plantilla abierta y refrescada. Empiezo a entender qué necesitás medir para reemplazarla por tu modelo real de trabajo.
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Phase 3 — Business Onboarding
|
|
165
|
+
|
|
166
|
+
Ask one question at a time. Keep answers conversational. Do not mention star schema yet unless the user asks.
|
|
167
|
+
|
|
168
|
+
### Q1: Dominio
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
¿De qué se trata el proyecto? Podés responder en una frase.
|
|
172
|
+
|
|
173
|
+
Ejemplos:
|
|
174
|
+
1. Finanzas personales
|
|
175
|
+
2. Empresa que vende productos y servicios
|
|
176
|
+
3. Inventario
|
|
177
|
+
4. Operaciones o logística
|
|
178
|
+
5. Marketing
|
|
179
|
+
6. Recursos humanos
|
|
180
|
+
7. Soporte o customer success
|
|
181
|
+
8. Otro
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Q2: Decision
|
|
185
|
+
|
|
186
|
+
```text
|
|
187
|
+
¿Qué querés poder decidir o controlar con este reporte?
|
|
188
|
+
|
|
189
|
+
Respondé en tus palabras. Por ejemplo: controlar ahorro, entender gastos, medir hábitos, ver deuda, comparar rendimiento, detectar atrasos, etc.
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Q3: Metrics
|
|
193
|
+
|
|
194
|
+
Tailor the list to Q1 and Q2. Always include numbered ideas and invite custom additions.
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
¿Qué métricas principales querés seguir?
|
|
198
|
+
|
|
199
|
+
Algunas ideas:
|
|
200
|
+
1. {metric-idea-1}
|
|
201
|
+
2. {metric-idea-2}
|
|
202
|
+
3. {metric-idea-3}
|
|
203
|
+
4. {metric-idea-4}
|
|
204
|
+
5. {metric-idea-5}
|
|
205
|
+
6. {metric-idea-6}
|
|
206
|
+
7. {metric-idea-7}
|
|
207
|
+
8. {metric-idea-8}
|
|
208
|
+
|
|
209
|
+
Respondé con los números que te sirvan y agregá cualquier otra métrica que se te ocurra.
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
For finance + habits, good ideas include: ingresos, gastos, ahorro, ahorro %, rendimiento de inversiones, deuda total, pago de deuda, hábitos cumplidos, cumplimiento %, racha actual.
|
|
213
|
+
|
|
214
|
+
### Q4: Dimensions
|
|
215
|
+
|
|
216
|
+
```text
|
|
217
|
+
¿Cómo querés cortar o analizar esas métricas?
|
|
218
|
+
|
|
219
|
+
Algunas ideas:
|
|
220
|
+
1. {dimension-idea-1}
|
|
221
|
+
2. {dimension-idea-2}
|
|
222
|
+
3. {dimension-idea-3}
|
|
223
|
+
4. {dimension-idea-4}
|
|
224
|
+
5. {dimension-idea-5}
|
|
225
|
+
6. {dimension-idea-6}
|
|
226
|
+
7. {dimension-idea-7}
|
|
227
|
+
8. {dimension-idea-8}
|
|
228
|
+
|
|
229
|
+
Respondé con los números que te sirvan y agregá cualquier otra dimensión que se te ocurra.
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
For finance + habits, good ideas include: mes, semana, día, categoría, subcategoría, cuenta/banco, medio de pago, tipo de movimiento, activo/inversión, deuda, hábito, área de vida.
|
|
233
|
+
|
|
234
|
+
### Optional Q5: Data Mapping
|
|
235
|
+
|
|
236
|
+
This is optional and must not block model generation.
|
|
237
|
+
|
|
238
|
+
```text
|
|
239
|
+
¿Querés documentar ahora de dónde vendrán los datos reales?
|
|
240
|
+
|
|
241
|
+
1. Saltar por ahora y seguir con datos demo
|
|
242
|
+
2. Excel / CSV
|
|
243
|
+
3. Software / SaaS / API
|
|
244
|
+
4. SQL / Fabric / Warehouse / otra base
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
If skipped, set source mapping to pending and add a roadmap item. If answered, document it in `docs/mapeo-de-datos.md`; do not connect sources.
|
|
248
|
+
|
|
249
|
+
## Phase 4 — Write Codex Project Context
|
|
250
|
+
|
|
251
|
+
Create only these files by default:
|
|
252
|
+
|
|
253
|
+
- `AGENTS.md`
|
|
254
|
+
- `ROADMAP.md`
|
|
255
|
+
- `LEARNINGS.md`
|
|
256
|
+
- optionally `docs/mapeo-de-datos.md`
|
|
257
|
+
|
|
258
|
+
Do not create agent adapter files. The generated `AGENTS.md` must say this is a Codex-first project and that other agent files are intentionally not created unless requested.
|
|
259
|
+
|
|
260
|
+
### `AGENTS.md` Required Content
|
|
261
|
+
|
|
262
|
+
Use concise Spanish when the conversation is Spanish. Include:
|
|
263
|
+
|
|
264
|
+
- Project name, domain, purpose, explanation style `educativo pero breve`, data mapping status.
|
|
265
|
+
- Rule: semantic changes via Power BI MCP only.
|
|
266
|
+
- Rule: PBIP files are read-only snapshots for agents.
|
|
267
|
+
- Rule: report/layout/bookmark changes are Desktop authoring. Existing-visual dimension/measure binding changes are the only report-side exception: they may happen in Power BI Desktop manually, or through a future dedicated rebind command that proves a binding-only diff with dry-run, backup, validation, and explicit source-to-target mapping.
|
|
268
|
+
- Rule: REPORT TOPOLOGY LOCK. Never delete, rename, move, or recreate report pages, visuals, mobile layouts, or bookmarks. Never create replacement visuals/pages to "fix" broken bindings. Do not rebuild a "minimal functional report". A/D/R under any `.Report` path is a hard stop.
|
|
269
|
+
- Rule: maintain Git commits after meaningful saved PBIP changes.
|
|
270
|
+
- Rule: read `LEARNINGS.md` at session start.
|
|
271
|
+
- Rule: update `ROADMAP.md` only after verification, not after optimistic live changes.
|
|
272
|
+
- Rule: keep `Data = "Demo"` / `Data = "Real"` pattern.
|
|
273
|
+
|
|
274
|
+
### `ROADMAP.md` Required Content
|
|
275
|
+
|
|
276
|
+
Before model generation, roadmap tasks must be unchecked. After verified persistence, mark only completed verified items. Never mark facts/measures/relationships complete before the persisted PBIP snapshot proves they exist.
|
|
277
|
+
|
|
278
|
+
### `docs/mapeo-de-datos.md` Required Content
|
|
279
|
+
|
|
280
|
+
If created, it must reference the destination model that will be generated or has been generated. If the model is not generated yet, say `Pendiente de generación`; do not later contradict it.
|
|
281
|
+
|
|
282
|
+
## Phase 5 — Propose Domain Star Schema
|
|
283
|
+
|
|
284
|
+
Translate the answers into a model proposal. Multiple facts are allowed and expected when the business process has different levels of detail. Do not use `grano` as a bare user-facing term. Say `cada fila representa ...`; if useful, explain once that modelers call that idea "grano" internally.
|
|
285
|
+
|
|
286
|
+
User-facing shape:
|
|
287
|
+
|
|
288
|
+
```text
|
|
289
|
+
Con lo que me contaste, propongo este modelo demo:
|
|
290
|
+
|
|
291
|
+
Tablas de hechos:
|
|
292
|
+
- {Fact1}: cada fila representa {row-meaning-1}
|
|
293
|
+
- {Fact2}: cada fila representa {row-meaning-2}
|
|
294
|
+
|
|
295
|
+
Dimensiones compartidas:
|
|
296
|
+
- {Dim1}
|
|
297
|
+
- {Dim2}
|
|
298
|
+
- {Dim3}
|
|
299
|
+
|
|
300
|
+
Métricas iniciales:
|
|
301
|
+
- {Metric1}
|
|
302
|
+
- {Metric2}
|
|
303
|
+
- {Metric3}
|
|
304
|
+
|
|
305
|
+
La idea es que las facts guarden eventos, estados o snapshots medibles, y las dimensiones sean los filtros para analizarlos. No voy a conectar datos reales todavía; voy a crear datos demo con la misma estructura destino que después usará `/bi-powerquery`.
|
|
306
|
+
|
|
307
|
+
¿Agregamos o quitamos algo antes de generarlo?
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
If the user changes scope, revise the proposal and ask again. Do not generate until approved.
|
|
311
|
+
|
|
312
|
+
## Phase 6 — Generate Model by MCP
|
|
313
|
+
|
|
314
|
+
After approval, use Power BI Modeling MCP only. Choose the exact operation before every write, read the affected object first, write once, then read back with the matching `Get` / `List` operation.
|
|
315
|
+
|
|
316
|
+
MCP operation map for generated models:
|
|
317
|
+
|
|
318
|
+
- Baseline reads: use `model_operations.Get`, `table_operations.List`, `table_operations.GetSchema`, `column_operations.List`, `measure_operations.List` / `measure_operations.Get`, `relationship_operations.List` / `relationship_operations.Find`, `partition_operations.List` / `partition_operations.Get`, `calculation_group_operations.ListGroups` / `calculation_group_operations.GetGroup`, `calculation_group_operations.ListItems`, `named_expression_operations.List` / `named_expression_operations.Get`, and `query_group_operations.List`.
|
|
319
|
+
- Model settings and date behavior: use `model_operations.Update` for model properties, preserving existing annotations because model collections can be replace-all; use `table_operations.MarkAsDateTable` with an explicit `DateColumnName` when creating or replacing a date table.
|
|
320
|
+
- Generated tables: create new M-backed dimensions/facts with `table_operations.Create` using `MExpression`, `Mode = Import`, and explicit `Columns` with `Name` and `DataType`; schema is not inferred for `MExpression`, `SqlQuery`, or `EntityName` tables. Only DAX calculated tables auto-derive schema.
|
|
321
|
+
- Existing report-bound table shells: when preserving a table name that the report already references, update the loaded table's expression with `partition_operations.Update` after `partition_operations.Get`; do not drop/recreate the table just to replace its demo rows.
|
|
322
|
+
- Power Query helpers: use `query_group_operations.Create` / `query_group_operations.Update` to organize generated queries, `named_expression_operations.Create` / `named_expression_operations.Update` for shared M expressions, and `named_expression_operations.CreateParameter` / `named_expression_operations.UpdateParameter` for Power Query parameters so parameter metadata is preserved.
|
|
323
|
+
- Columns: use `column_operations.Create` for calculated/source columns that do not already come from the M table schema, `column_operations.Update` for metadata, sort-by, visibility, formatting, and summarization, and `column_operations.Rename` only when the column is not report-bound.
|
|
324
|
+
- Relationships: use `relationship_operations.Create`, `relationship_operations.Update`, `relationship_operations.Activate`, and `relationship_operations.Deactivate`; in relationship definitions `FromTable` is the many/fact side and `ToTable` is the one/dimension side.
|
|
325
|
+
- Measures: validate DAX with `dax_query_operations.Validate` / `Execute`, then persist with `measure_operations.Create` or `measure_operations.Update`. Use `measure_operations.Move` for table moves; delete/recreate is not an acceptable substitute for `Move` or `Update` on report-bound measures.
|
|
326
|
+
- Calculation groups and metric dispatchers: inspect with `calculation_group_operations.GetGroup` / `ListItems`, update existing report-bound groups with `calculation_group_operations.UpdateGroup`, `calculation_group_operations.UpdateItems`, and `calculation_group_operations.ReorderItems`; create groups/items only when the template kernel truly lacks them.
|
|
327
|
+
- Packaged demo cleanup: remove Andina Nexus business relationships, measures, partitions, named expressions, query groups, and tables only after the generated model validates. Use explicit `relationship_operations.Delete`, `measure_operations.Delete`, `partition_operations.Delete`, `named_expression_operations.Delete`, `query_group_operations.Delete`, and `table_operations.Delete` as needed; do not use cascade deletion as a shortcut for dependency analysis.
|
|
328
|
+
- Desktop processing boundary: do not run any MCP data-refresh/processing operation against the open Desktop model. Desktop owns `Aplicar cambios` and `Inicio ▶ Actualizar`; MCP authors metadata and validates the model.
|
|
329
|
+
|
|
330
|
+
Required operations:
|
|
331
|
+
|
|
332
|
+
1. Create generated domain dimensions and facts with Spanish business names when appropriate.
|
|
333
|
+
2. Every appendable business table gets a `Data` column with `Demo` rows.
|
|
334
|
+
3. Demo IDs use the original key columns and stable entity-coded IDs like `ClienteA25D`.
|
|
335
|
+
4. Create relationships from each fact to `Calendario` and conforming dimensions.
|
|
336
|
+
5. Create or update measures for selected metrics.
|
|
337
|
+
6. For any non-trivial generated M, consult Microsoft Learn MCP for the relevant M constructs before applying it: record syntax, table operations, type conversion, missing-field behavior, joins, query folding, connector behavior, or native queries.
|
|
338
|
+
7. Validate generated Power Query M syntax before applying it. If using records for reusable demo keys, access fields with `Keys[Group][Name]` or `Record.Field`, never with dotted paths like `Keys.Group.Name`.
|
|
339
|
+
8. Replace the `Métricas` catalog with the domain metrics, preserving formatting metadata and the intentional multiline layout.
|
|
340
|
+
9. Update metric dispatchers so `[Actual]`, `[Previo]`, `[Variación]`, `[Variación %]`, labels, colors, and tooltips resolve against the domain metrics.
|
|
341
|
+
10. Preserve report-bound technical table and column names. Do not rename `_GC *`, `_PC *`, `_Aux *`, existing report-bound columns, or existing field parameter tables just to make names prettier. Update rows, calculation items, expressions, and hidden metadata in place where possible.
|
|
342
|
+
11. Update the existing dimension field parameter rows to business dimensions that make semantic sense for the selected metrics/facts. If a new field parameter table is unavoidable, record the old-to-new report binding map for the Report visual rebind gate.
|
|
343
|
+
12. Remove the packaged Andina Nexus demo business model after the generated model works, unless the approved domain intentionally keeps parts of it:
|
|
344
|
+
- packaged demo dimensions and facts such as `Clientes`, `Productos`, `Canales`, `Servicios`, `Proyectos`, `Equipos`, `Campañas`, `Ventas`, `Oportunidades`, `Leads`, `Interacciones clientes`, `Entregas`, `Órdenes servicio`, `Movimientos financieros`, `Presupuesto`, `Devoluciones`, `Horas`, `Nómina`, `Ejecución proyectos`, and `Tareas proyecto`
|
|
345
|
+
- packaged demo measures and display folders
|
|
346
|
+
- packaged demo field parameter rows
|
|
347
|
+
- packaged demo relationships
|
|
348
|
+
- packaged demo sample queries
|
|
349
|
+
13. Keep technical kernel objects:
|
|
350
|
+
- `Calendario`
|
|
351
|
+
- `Monedas` and `Tipo de cambio` only if the domain needs currency
|
|
352
|
+
- `_GC *` names and report-bound columns
|
|
353
|
+
- `_PC *` names and report-bound columns
|
|
354
|
+
- `_Aux *` names and report-bound columns
|
|
355
|
+
- carrier measures `Actual`, `Previo`, `Variación`, `Variación %`
|
|
356
|
+
|
|
357
|
+
If any delete would break a technical dependency, first rebind/update the dependency, then delete. Do not leave a half-packaged-template business model.
|
|
358
|
+
|
|
359
|
+
## Phase 7 — Live Verification
|
|
360
|
+
|
|
361
|
+
Before asking the user to save, verify through MCP:
|
|
362
|
+
|
|
363
|
+
- Generated facts exist.
|
|
364
|
+
- Generated dimensions exist.
|
|
365
|
+
- Relationships exist and point to generated tables.
|
|
366
|
+
- `Métricas` contains only domain metrics.
|
|
367
|
+
- `[Actual]`, `[Previo]`, `[Variación]`, `[Variación %]` evaluate without error for at least one domain metric.
|
|
368
|
+
- Field parameter rows point to generated dimensions.
|
|
369
|
+
- Report-bound technical table and column names were preserved, or a complete source-to-target visual rebind map exists.
|
|
370
|
+
- Packaged Andina Nexus sample tables/measures are gone unless the approved domain intentionally keeps them.
|
|
371
|
+
|
|
372
|
+
If verification fails, fix it before continuing. Do not update `ROADMAP.md` as complete yet.
|
|
373
|
+
|
|
374
|
+
## Phase 8 — Persist Semantic Model, Close Desktop, Rebind/Hand Off Report, Then Commit
|
|
375
|
+
|
|
376
|
+
Tell the user:
|
|
377
|
+
|
|
378
|
+
```text
|
|
379
|
+
El modelo semántico ya quedó bien en Power BI Desktop. Todavía falta una parte importante: guardar, cerrar Desktop y revisar los visuales del reporte.
|
|
380
|
+
|
|
381
|
+
Presioná Ctrl+S en Power BI Desktop. Cuando termine de guardar, cerrá Power BI Desktop y avisame. Necesito el archivo guardado y cerrado para validar el snapshot en disco. Si algún visual necesita reconexión, ese paso queda como trabajo manual dentro de Power BI Desktop; no voy a parchear PBIR por archivos.
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
After the user confirms save and Desktop is closed:
|
|
385
|
+
|
|
386
|
+
1. Inspect persisted TMDL files under `pbip-files/{projectName}.SemanticModel/definition/`.
|
|
387
|
+
2. Verify generated tables/metrics/relationships are present.
|
|
388
|
+
3. Verify no leftover packaged Andina Nexus sample model remains unless intentionally used.
|
|
389
|
+
4. Update `ROADMAP.md` marking only verified items complete.
|
|
390
|
+
5. Update `docs/mapeo-de-datos.md` if it exists, so `Modelo demo generado` matches the real generated model.
|
|
391
|
+
6. Run the Report visual rebind gate.
|
|
392
|
+
7. Run `git status --short`.
|
|
393
|
+
8. Commit:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
git add -A
|
|
397
|
+
git commit -m "feat: generate initial BI semantic model"
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### Report visual rebind gate
|
|
401
|
+
|
|
402
|
+
The report shell is useful, but it is not automatically self-healing. If the semantic model replaced or removed template fields, visuals may still point at old field-parameter rows, slicers, filters, tooltip fields, labels, or query refs. This is why a visual can break even when it appears to use `[Actual]` and `Calendario`: the visual also carries hidden/report-side bindings.
|
|
403
|
+
|
|
404
|
+
Required behavior:
|
|
405
|
+
|
|
406
|
+
1. Save and close Power BI Desktop before inspecting persisted PBIP/PBIR files.
|
|
407
|
+
2. **No safe report rebind command currently ships with this plugin.** Do not patch PBIR JSON by hand and do not invent a report repair workflow.
|
|
408
|
+
3. Existing-visual dimension/measure binding changes are the only report-side exception. If a future dedicated report field-swap/rebind command ships, it may only mutate data-binding nodes: projections, prototype query, query refs, field-parameter references, and sort/filter field references when required. It must preserve visual type, layout, formatting, interactions, IDs, theme, bookmarks, page IDs, visual folder IDs, and mobile layout files, and it must provide dry-run, backup, validation, and an explicit source-to-target mapping.
|
|
409
|
+
4. Before committing, run `git diff --name-status` and inspect `.Report/**`. Any added, deleted, or renamed report path (`A`, `D`, or `R`) is a failed gate. A/D/R under `.Report` means stop, restore the report shell from the scaffold commit, and leave visual binding as manual.
|
|
410
|
+
5. If the rebind command is unavailable, do not hand-edit PBIR JSON. Commit the verified semantic model and mark report visual rebind as a manual pending task in `ROADMAP.md`.
|
|
411
|
+
6. No final success message can say the report is ready until visual bindings are either validated or explicitly handed off as manual.
|
|
412
|
+
|
|
413
|
+
Manual handoff message when no rebind tool is available:
|
|
414
|
+
|
|
415
|
+
```text
|
|
416
|
+
El modelo semántico quedó guardado y verificado, pero el reporte todavía necesita rebind visual.
|
|
417
|
+
|
|
418
|
+
Esto pasa porque los visuales de Power BI guardan referencias internas a campos, field parameters, filtros y tooltips de la plantilla anterior. Ya cerraste Desktop, así que el estado de archivos está seguro.
|
|
419
|
+
|
|
420
|
+
Como en esta sesión no tengo una herramienta segura de rebind de visuales, dejo el modelo versionado y el rebind del reporte como tarea pendiente. El siguiente paso es abrir Power BI Desktop y reemplazar en cada visual los campos rotos por las nuevas métricas, dimensiones y parámetros del modelo.
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
> En claro para el usuario: "Algunos gráficos pueden mostrar un error hasta que reconectemos sus campos (rebind = volver a apuntar cada gráfico a su dato). Te guío uno por uno y te digo qué vas a ver."
|
|
424
|
+
|
|
425
|
+
```text
|
|
426
|
+
Reconectar un visual, paso a paso (cuando un gráfico quedó con error):
|
|
427
|
+
1. En Power BI Desktop, hacé clic en el gráfico que muestra el error.
|
|
428
|
+
2. En el panel de la derecha vas a ver los campos que usaba; arrastrá el campo equivalente del nuevo modelo a su lugar.
|
|
429
|
+
3. Cómo sabés que funcionó: el error desaparece y el gráfico vuelve a mostrar números. Avisame y seguimos con el próximo.
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
Final message shape:
|
|
433
|
+
|
|
434
|
+
```text
|
|
435
|
+
Listo. El modelo quedó guardado y versionado.
|
|
436
|
+
|
|
437
|
+
Creé el modelo demo de {domain}, verifiqué que quedó persistido en PBIP y dejé dos commits: el scaffold inicial y el modelo generado.
|
|
438
|
+
|
|
439
|
+
Lo que ya tenés: un tablero de ejemplo con tus propias categorías; para leerlo, filtrá por mes arriba y mirá cómo cambian las tarjetas.
|
|
440
|
+
|
|
441
|
+
Estado del reporte: {visual-status}. El siguiente paso natural es ajustar/rebindear las páginas del reporte en Power BI Desktop, o pasar a `/bi-powerquery` para mapear tus datos reales.
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
If persisted validation fails, say exactly what is missing and do not commit a success state.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Internal operator appendix (agent-only — no es copia para el usuario)
|
|
449
|
+
|
|
450
|
+
> Todo lo que sigue es mecánica para vos, el agente. Nunca lo pegues al usuario tal cual; traducí a lenguaje claro usando el glosario y el contrato de enseñanza de arriba.
|
|
451
|
+
|
|
452
|
+
## MANDATORY RULES
|
|
453
|
+
|
|
454
|
+
1. **Codex project context only by default.** Create `AGENTS.md`, `ROADMAP.md`, `LEARNINGS.md`, and optional `docs/mapeo-de-datos.md`. Do not create `CLAUDE.md`, `GEMINI.md`, `.github/copilot-instructions.md`, `.kilo/`, or any other agent-adapter files unless the user explicitly asks for multi-agent compatibility.
|
|
455
|
+
2. **One question at a time.** Ask one user-facing question, wait, then continue. Use numbered suggestions for metrics and dimensions. Do not ask for time grain; the base template already handles period selectors, date ranges, previous period, and interannual comparison.
|
|
456
|
+
3. **Silent successful checks.** Platform, folder, template discovery, and command output are internal. If they pass, do not narrate them.
|
|
457
|
+
4. **Open the PBIP yourself after the scaffold commit.** Do not ask the user to open the file. Launch Power BI Desktop with the generated `.pbip` and create the first "wow" moment. Only fall back to giving the exact path if GUI launch fails.
|
|
458
|
+
5. **First refresh is mandatory and happens in Power BI Desktop.** After opening the PBIP and connecting MCP, the first data refresh is a Desktop action — `Inicio ▶ Actualizar` (or `Aplicar cambios` when Power Query has pending changes). Microsoft does not support processing/refresh commands against a model open in Desktop, so the Modeling MCP cannot refresh data; it reads the model and validates DAX. Ask the user to refresh in Desktop, wait for confirmation, then read the baseline through MCP.
|
|
459
|
+
6. **Do not use `grano` as a bare user-facing term.** Use `cada fila representa ...` or `nivel de detalle`. If teaching the concept, say: "a esto internamente los modeladores le dicen grano".
|
|
460
|
+
7. **Windows + Power BI Desktop + Modeling MCP.** Local kickoff requires Power BI Desktop and the Power BI Modeling MCP. If MCP is unavailable, stop before semantic work.
|
|
461
|
+
8. **Always start from `base-template`.** Do not offer blank PBIP. The template is the technical kernel: date logic, bookmarks, carriers, calculation groups, metric/team filtering, metric-aware dimensions, Power Query demo tables, Demo/Real pattern, and report shell.
|
|
462
|
+
9. **Model-ready is not report-ready.** Power BI report visuals store hard bindings to fields, measures, field-parameter tables, slicers, filters, tooltips, titles, labels, and query refs. After replacing the template model, preserve report-bound technical table and column names wherever possible and run the Report visual rebind gate before claiming the report is usable.
|
|
463
|
+
10. **Power Query M record access must use M syntax.** Never generate dotted record paths such as `Keys.Categoria.IngresosRec`. Power Query interprets those as module imports and fails with "La importación ... no coincide con ninguna exportación". Use bracket access like `Keys[Categoria][IngresosRec]`, or use a helper such as `Record.Field(Record.Field(Keys, "Categoria"), "IngresosRec")`.
|
|
464
|
+
11. **Microsoft Learn MCP is the M reference gate.** Before generating, debugging, or applying non-trivial Power Query M, consult Microsoft Learn MCP for the relevant M constructs: record access, joins, type conversion, schema handling, query folding, connector behavior, or native queries. Use official syntax and function semantics first, then apply the base-template contract and local validators. Do not rely on JavaScript/Python-style intuition for M.
|
|
465
|
+
12. **Packaged Andina Nexus is disposable sample data.** `Clientes`, `Productos`, `Canales`, `Servicios`, `Proyectos`, `Equipos`, `Campañas`, their related facts, metric catalog rows, metric-team bridge rows, and field-parameter rows are only the packaged product-and-services example. The final generated model must not keep that sample domain unless the user's actual domain intentionally reuses those names and structures.
|
|
466
|
+
13. **Semantic writes use operation-specific MCP calls.** Every model write uses the Phase 6 operation map: read with the matching `Get` / `List`, write through the exact Modeling MCP operation, then read back. Never hand-edit `.tmdl`, `.pbip`, `.SemanticModel/**`, `unappliedChanges.json`, or `.Report/**` for semantic changes. Microsoft supports external tools writing model metadata through Desktop's Analysis Services instance, but not sending processing commands to a model loaded in Power BI Desktop. Read files for validation only.
|
|
467
|
+
14. **Report files are not hand-edited.** Keep report/layout/bookmark authoring in Power BI Desktop. Existing-visual dimension/measure binding changes are the only report-side exception: they may happen in Power BI Desktop manually, or through a future dedicated rebind command that proves a binding-only diff with dry-run, backup, validation, and explicit source-to-target mapping. No safe report rebind command currently ships with this plugin, so visual rebind is a manual Desktop step today. Do not claim report completion when visual rebind remains manual.
|
|
468
|
+
**Microsoft Learn's PBIP project guidance.** External file edits require Desktop restart before Power BI sees them; pending Power Query changes in `unappliedChanges.json` can overwrite expression edits when applied; and `report.json`, `mobileState.json`, `semanticModelDiagramLayout.json`, and `diagramLayout.json` are unsupported external-edit surfaces. Treat those files as diagnostic-only in this plugin.
|
|
469
|
+
15. **REPORT TOPOLOGY LOCK.** Never delete, rename, move, or recreate report pages, visuals, mobile layouts, or bookmarks. Never create replacement visuals/pages to "fix" broken bindings. Do not rebuild a "minimal functional report". A/D/R under any `.Report` path is a hard stop: restore the scaffold report state or stop and hand off manual Desktop work. Kickoff may replace the semantic model, but it must preserve the report shell.
|
|
470
|
+
16. **Save before file validation; rebind remains manual.** After the semantic model is saved and persisted, ask the user to close Desktop before inspecting PBIP/PBIR files so Desktop cannot overwrite the snapshot mid-check. Since no safe report rebind command ships today, visual reconnection remains a manual Power BI Desktop step; never patch report files while Desktop has the PBIP open.
|
|
471
|
+
17. **Git is mandatory.** New kickoff projects must become Git repos. If no `.git` exists, initialize one. Commit the untouched scaffold before semantic changes, then commit the verified generated model after Desktop save/export.
|
|
472
|
+
18. **No real source ingestion.** Kickoff documents sources optionally. `/bi-powerquery` later creates M queries and appends `Data = "Real"` rows.
|
|
473
|
+
19. **Do not mark success until persisted.** A live MCP change is not enough. The user must save/export from Desktop, then the agent must verify the PBIP/TMDL snapshot contains the generated domain model and no unintended packaged-template residue before updating `ROADMAP.md` as complete. Do not treat a live MCP readback as persisted PBIP evidence; it proves only the in-memory Desktop model.
|
|
474
|
+
20. **Teach briefly.** Default to a guided style that is educativo pero breve: explain modeling decisions in plain language without asking the user to choose an explanation level. Do not dump raw DAX/TMDL unless the user asks.
|
|
475
|
+
|
|
476
|
+
## Common Failure Modes and Required Response
|
|
477
|
+
|
|
478
|
+
| Failure | Required response |
|
|
479
|
+
|---|---|
|
|
480
|
+
| Agent wants to create CLAUDE/GEMINI/.github/.kilo files | Stop. Codex-only project context creates only `AGENTS.md` unless user explicitly asks for multi-agent adapters. |
|
|
481
|
+
| Agent marks roadmap complete before save | Stop. Completion requires persisted PBIP validation. |
|
|
482
|
+
| Packaged-template business tables remain in an unrelated generated domain | Stop. Rebind/update dependencies and remove the leftover Andina Nexus sample model. |
|
|
483
|
+
| Visuals break after semantic model generation | Explain that report visuals store hard bindings beyond `[Actual]` and `Calendario`; save, close Desktop, run the Report visual rebind gate or hand off manual rebind. |
|
|
484
|
+
| Agent wants to delete old visuals/bookmarks and create a new minimal page | Stop. REPORT TOPOLOGY LOCK forbids deleting, renaming, moving, or recreating report pages, visuals, mobile layouts, or bookmarks. |
|
|
485
|
+
| Agent is uncertain about Power Query M syntax, connector behavior, or query folding | Stop and consult Microsoft Learn MCP for the relevant M constructs before generating or applying the query. |
|
|
486
|
+
| Power Query fails with `La importación Keys... no coincide con ninguna exportación` | Fix the generated M at the source. Replace dotted record access like `Keys.Categoria.IngresosRec` with `Keys[Categoria][IngresosRec]` or `Record.Field`; then re-apply Power Query changes. |
|
|
487
|
+
| MCP live model differs from saved files | Ask user to save/export, then re-verify. Do not claim done. |
|
|
488
|
+
| No Git repo exists | Initialize Git and commit scaffold before semantic work. |
|
|
489
|
+
| User wants existing project migration | Route to `/bi-refactor`. |
|
|
490
|
+
| User wants real source ingestion | Document only; route implementation to `/bi-powerquery`. |
|
|
491
|
+
|
|
492
|
+
## What This Skill Does Not Do
|
|
493
|
+
|
|
494
|
+
- It does not refactor existing models.
|
|
495
|
+
- It does not connect real data sources.
|
|
496
|
+
- It does not author final report layouts or bookmarks.
|
|
497
|
+
- It does not rebuild reports, delete visuals, delete bookmarks, create replacement visuals, or create a minimal fallback page.
|
|
498
|
+
- It does not claim report visuals are ready unless the Report visual rebind gate passes or the manual handoff is explicit.
|
|
499
|
+
- It does not create multi-agent config files by default.
|
|
500
|
+
- It does not leave packaged Andina Nexus business objects in an unrelated final model.
|
|
501
|
+
- It does not call live-only MCP changes complete until saved and verified in PBIP files.
|
|
502
|
+
|
|
503
|
+
## Related Skills
|
|
504
|
+
|
|
505
|
+
- `/bi-connect` for MCP connection troubleshooting.
|
|
506
|
+
- `/bi-powerquery` for real-source Power Query staging and append into `Data = "Real"` tables.
|
|
507
|
+
- `/bi-modeling` for deeper semantic modeling review.
|
|
508
|
+
- `/bi-refactor` for existing PBIP/PBIX migration or upgrade work.
|
|
509
|
+
|
|
510
|
+
## Maintainer Pressure Tests
|
|
511
|
+
|
|
512
|
+
The RED phase that motivated this production contract:
|
|
513
|
+
|
|
514
|
+
1. New Codex project created `CLAUDE.md`, `GEMINI.md`, `.github`, and `.kilo` despite the user using Codex only.
|
|
515
|
+
2. Generated project had no `.git`, while `AGENTS.md` claimed it was a Git repo.
|
|
516
|
+
3. `ROADMAP.md` marked finance/habits facts and measures complete, but persisted TMDL still contained only the packaged template sample model.
|
|
517
|
+
4. Packaged-template tables, measures, relationships, and report bindings remained after an unrelated-domain kickoff.
|
|
518
|
+
5. The conversation exposed technical inventory instead of a clean user-facing flow.
|
|
519
|
+
6. A generated semantic model broke report visuals because report-bound technical objects were renamed/deleted and no visual rebind gate ran.
|
|
520
|
+
7. A later agent deleted template visuals/bookmarks and rebuilt a minimal report instead of preserving topology and only rebinding fields/measures.
|
|
521
|
+
8. Generated M used JavaScript-style dotted record access (`Keys.Categoria.IngresosRec`), which Power Query treated as a missing module import during `Aplicar cambios`.
|
|
522
|
+
|
|
523
|
+
A compliant run must fail closed on all listed failures.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="es">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>/bi-kickoff production flow</title>
|
|
7
|
+
<style>
|
|
8
|
+
body { font-family: Segoe UI, Arial, sans-serif; margin: 0; background: #f6f7f9; color: #1f2937; }
|
|
9
|
+
main { max-width: 1180px; margin: 0 auto; padding: 32px 24px 48px; }
|
|
10
|
+
h1 { margin: 0 0 8px; font-size: 28px; }
|
|
11
|
+
p { margin: 0 0 24px; color: #4b5563; }
|
|
12
|
+
.panel { background: white; border: 1px solid #d8dee8; border-radius: 8px; padding: 24px; overflow-x: auto; }
|
|
13
|
+
.rules { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin-top: 20px; }
|
|
14
|
+
.rule { background: #fff; border: 1px solid #d8dee8; border-left: 4px solid #111827; border-radius: 6px; padding: 12px 14px; font-size: 14px; }
|
|
15
|
+
</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<main>
|
|
19
|
+
<h1>/bi-kickoff production flow</h1>
|
|
20
|
+
<p>Flujo de producción: proyecto nuevo, Codex-first, Git obligatorio, modelo demo por MCP, eliminación del ejemplo de ventas y validación persistida antes de declarar éxito.</p>
|
|
21
|
+
<div class="panel">
|
|
22
|
+
<pre class="mermaid">
|
|
23
|
+
flowchart TD
|
|
24
|
+
A["Usuario invoca /bi-kickoff"] --> B{"Proyecto nuevo?"}
|
|
25
|
+
B -->|"No / PBIP existente"| Ref["Derivar a /bi-refactor"]
|
|
26
|
+
B -->|"Si / carpeta vacia"| C["Primer mensaje simple<br/>pregunta nombre"]
|
|
27
|
+
C --> D["Scaffold desde base-template<br/>sin narrar checks"]
|
|
28
|
+
D --> E{"Existe Git?"}
|
|
29
|
+
E -->|"No"| F["git init"]
|
|
30
|
+
E -->|"Si"| G["Commit scaffold inicial"]
|
|
31
|
+
F --> G
|
|
32
|
+
G --> H["Agente abre PBIP en Desktop"]
|
|
33
|
+
H --> I["Aclarar: aún es plantilla<br/>siguiente mensaje genera modelo"]
|
|
34
|
+
I --> J["Conectar MCP"]
|
|
35
|
+
J --> K["Pedir Inicio > Actualizar<br/>y esperar confirmación"]
|
|
36
|
+
K --> N["Onboarding negocio<br/>una pregunta por vez"]
|
|
37
|
+
N --> O["Métricas, dimensiones y tiempo<br/>con opciones numeradas"]
|
|
38
|
+
O --> P{"Mapeo de datos ahora?"}
|
|
39
|
+
P -->|"No"| Q["Pendiente para /bi-powerquery"]
|
|
40
|
+
P -->|"Si"| R["docs/mapeo-de-datos.md<br/>sin conectar fuentes reales"]
|
|
41
|
+
Q --> S["AGENTS.md + ROADMAP.md + LEARNINGS.md<br/>Codex-only"]
|
|
42
|
+
R --> S
|
|
43
|
+
S --> T["Proponer modelo demo<br/>cada fila representa algo medible"]
|
|
44
|
+
T --> U{"Agregamos o quitamos algo?"}
|
|
45
|
+
U -->|"Cambios"| T
|
|
46
|
+
U -->|"Aprobado"| Gen["Crear modelo por MCP"]
|
|
47
|
+
Gen --> Model["Crear facts, dims, relaciones, métricas, dispatchers"]
|
|
48
|
+
Model --> Clean["Eliminar star schema demo de Ventas<br/>si el dominio no es ventas"]
|
|
49
|
+
Clean --> V{"Verificación MCP pasa?"}
|
|
50
|
+
V -->|"No"| Gen
|
|
51
|
+
V -->|"Si"| W["Usuario guarda y cierra Desktop"]
|
|
52
|
+
W --> X{"TMDL persistido valida?"}
|
|
53
|
+
X -->|"No"| W
|
|
54
|
+
X -->|"Si"| Y{"Visual bindings validados?"}
|
|
55
|
+
Y -->|"Rebind tool"| RB["Rebind seguro<br/>backup + dry-run + validación"]
|
|
56
|
+
Y -->|"Manual"| MH["Handoff manual explícito<br/>reporte pendiente"]
|
|
57
|
+
RB --> Cmt["Actualizar ROADMAP/docs<br/>commit modelo generado"]
|
|
58
|
+
MH --> Cmt
|
|
59
|
+
Cmt --> Z["Handoff: report rebind, authoring o /bi-powerquery"]
|
|
60
|
+
</pre>
|
|
61
|
+
</div>
|
|
62
|
+
<section class="rules">
|
|
63
|
+
<div class="rule">Codex-only por defecto: sin CLAUDE.md, GEMINI.md, .github ni .kilo.</div>
|
|
64
|
+
<div class="rule">Git obligatorio: commit del scaffold antes de tocar el modelo.</div>
|
|
65
|
+
<div class="rule">El agente abre el PBIP y pide el primer refresh en Desktop; MCP lee y valida después, no procesa datos en un modelo abierto.</div>
|
|
66
|
+
<div class="rule">El usuario ve "cada fila representa..." en lugar de jerga como grano.</div>
|
|
67
|
+
<div class="rule">Se preservan nombres técnicos bindeados al reporte; si no alcanza, hay gate de rebind visual.</div>
|
|
68
|
+
<div class="rule">REPORT TOPOLOGY LOCK: no borrar, renombrar, mover o recrear páginas, visuales, layouts mobile o bookmarks. Solo rebind de dimensiones/medidas dentro de visuales existentes: Desktop manual o futura herramienta segura.</div>
|
|
69
|
+
<div class="rule">El ejemplo de ventas se elimina en proyectos que no son de ventas.</div>
|
|
70
|
+
<div class="rule">Nada queda completo hasta guardar, cerrar Desktop, validar TMDL y resolver el estado visual.</div>
|
|
71
|
+
</section>
|
|
72
|
+
</main>
|
|
73
|
+
<script type="module">
|
|
74
|
+
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
|
|
75
|
+
mermaid.initialize({ startOnLoad: true, theme: 'base', themeVariables: { primaryColor: '#ffffff', primaryBorderColor: '#111827', primaryTextColor: '#111827', lineColor: '#64748b', tertiaryColor: '#f3f4f6' } });
|
|
76
|
+
</script>
|
|
77
|
+
</body>
|
|
78
|
+
</html>
|