pbiplint 0.2.3 → 0.2.5
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/NOTICE +6 -0
- package/README.md +46 -7
- package/dist/pbiplint.mjs +18856 -3336
- package/package.json +8 -3
- package/skill/SKILL.md +90 -0
package/NOTICE
CHANGED
|
@@ -2,6 +2,12 @@ pbiplint itself is licensed under the GNU Affero General Public License,
|
|
|
2
2
|
version 3 or later; see LICENSE. The MIT license text below applies only
|
|
3
3
|
to the third-party material described here, not to pbiplint.
|
|
4
4
|
|
|
5
|
+
One file of pbiplint's own is MIT-licensed instead: the skill for AI
|
|
6
|
+
assistants (packages/cli/skill/SKILL.md, skill/SKILL.md in the npm
|
|
7
|
+
package), which pbiplint skill prints and installs, so it can be
|
|
8
|
+
committed to any repository. Its license notice is at the end of the
|
|
9
|
+
file.
|
|
10
|
+
|
|
5
11
|
pbiplint bundles rule definitions derived from BPARules.json in the
|
|
6
12
|
microsoft/Analysis-Services repository (https://github.com/microsoft/Analysis-Services),
|
|
7
13
|
which is licensed under the MIT License:
|
package/README.md
CHANGED
|
@@ -4,8 +4,10 @@ Best-practice linter for Power BI projects. Point it at a PBIP folder, a `.pbip`
|
|
|
4
4
|
`.SemanticModel` folder, a `.Report` folder, a `definition` folder, or one `.tmdl` file and get
|
|
5
5
|
ranked findings with a link to a fix page for each rule, and, when the input has a report, a
|
|
6
6
|
"Report at a glance" block that says what the report will do when someone opens it. Nothing is
|
|
7
|
-
uploaded: it reads the files you name and writes to your terminal
|
|
8
|
-
|
|
7
|
+
uploaded: it reads the files you name and writes to your terminal, and
|
|
8
|
+
[the pbiplint Privacy Promise](https://pbiplint.com/privacy/) says what that covers. Node 20.19 or a
|
|
9
|
+
later 20 release, or 22.12 or later. [The pbiplint CLI](https://pbiplint.com/cli/) page on the site has more:
|
|
10
|
+
where to get it, what it reads, and how to check that it sends nothing.
|
|
9
11
|
|
|
10
12
|
```bash
|
|
11
13
|
npx pbiplint path/to/Model.SemanticModel
|
|
@@ -13,15 +15,48 @@ npx pbiplint --sample # a bundled project,
|
|
|
13
15
|
npx pbiplint path/to/model --format sarif --output pbiplint.sarif
|
|
14
16
|
npx pbiplint path/to/model --format markdown
|
|
15
17
|
npx pbiplint rules # every rule with status and severity
|
|
18
|
+
npx pbiplint explain HIDE_FOREIGN_KEYS # one rule's guidance, offline (--format json too)
|
|
19
|
+
npx pbiplint path/to/model --quiet # the counts, one line per rule
|
|
20
|
+
npx pbiplint path/to/model --rule HIDE_FOREIGN_KEYS # one rule's findings (repeatable)
|
|
21
|
+
npx pbiplint skill --install claude # the skill for AI assistants (--install copilot, codex, gemini; --show)
|
|
22
|
+
npx pbiplint mcp # a local MCP server for an AI assistant to start
|
|
16
23
|
npx pbiplint --help # every option, in one screen
|
|
17
24
|
npx pbiplint --version
|
|
18
25
|
```
|
|
19
26
|
|
|
27
|
+
An AI assistant that edits a project can keep its context small: `--quiet` for the counts, one line
|
|
28
|
+
per rule; `--rule <RULE_ID>`, repeatable, for those rules' findings (every rule still runs, the
|
|
29
|
+
summary says how many are shown of how many, and `--fail-on` counts only those); and
|
|
30
|
+
`pbiplint explain <RULE_ID>` for the rule's guidance, from this version, with no network. When there
|
|
31
|
+
are findings, the quiet output's last line names the other two.
|
|
32
|
+
|
|
33
|
+
`pbiplint skill` prints a skill, in the [Agent Skills](https://agentskills.io/home) format, that tells
|
|
34
|
+
a coding assistant how to use pbiplint. `--install claude`, `copilot`, `codex`, or `gemini` writes it
|
|
35
|
+
where that assistant reads a project's skills, below the current folder; it never replaces a copy
|
|
36
|
+
that differs unless given `--force`, and `--dry-run` writes nothing. `--show` lists where it is and
|
|
37
|
+
whether each copy matches this version.
|
|
38
|
+
|
|
39
|
+
`pbiplint mcp` is a local MCP server over stdin and stdout, for an assistant that runs local
|
|
40
|
+
servers (Claude Desktop, Claude Code, VS Code, Cursor) to start. Its three tools only read: `lint`
|
|
41
|
+
(what `--format json` prints, or with `quiet` the short summary), `explain_rule`, and `list_rules`.
|
|
42
|
+
It opens no port. See [the CLI page](https://pbiplint.com/cli/#mcp) for each app's setup.
|
|
43
|
+
|
|
20
44
|
Formats: `text` (default), `json`, `sarif` (for GitHub code scanning and editors), `markdown`.
|
|
45
|
+
The Markdown export writes an email address, an `@name`, a `#123` or `GH-123`, and text
|
|
46
|
+
holding two or more `$` as code, so pasted into a GitHub issue or comment it links no one,
|
|
47
|
+
notifies no one, and renders no math.
|
|
21
48
|
|
|
22
|
-
Exit codes: `0` no findings at or above `--fail-on`, `1` findings, `2` usage
|
|
49
|
+
Exit codes: `0` no findings at or above `--fail-on`, `1` findings, `2` a usage error, an input it
|
|
50
|
+
cannot read, or nothing to lint. [What a script can rely on](https://pbiplint.com/cli/#contract)
|
|
51
|
+
states what stdout carries, every exit code, and the JSON documents' fields.
|
|
23
52
|
`--fail-on error` is the default; `--fail-on warning` and `--fail-on info` tighten the gate;
|
|
24
|
-
`--fail-on none`
|
|
53
|
+
`--fail-on none` exits 0 on any run that lints something. A run that can read nothing in the input,
|
|
54
|
+
such as a report saved as a single `report.json` (PBIR-Legacy) with no model beside it, exits `2`
|
|
55
|
+
and says why, rather than passing with no findings.
|
|
56
|
+
|
|
57
|
+
Pointed at a folder that is not a project but holds one in a folder below it, as a repository
|
|
58
|
+
often does, pbiplint lints that project and names it in a notice. A folder that holds several exits
|
|
59
|
+
`2` and lists them, each with the command that lints it.
|
|
25
60
|
|
|
26
61
|
## Configuration
|
|
27
62
|
|
|
@@ -70,8 +105,10 @@ community's published rule files, and are checked against Tabular Editor on the
|
|
|
70
105
|
the Microsoft rules need statistics only a live model has; they are listed but not run. A column
|
|
71
106
|
whose TMDL names no type, as Power BI Desktop saves most calculated columns, is left out of the
|
|
72
107
|
thirteen ported rules that test a column's type, where Tabular Editor reads the type from the
|
|
73
|
-
column's DAX.
|
|
74
|
-
|
|
108
|
+
column's DAX. A TMDL line the parser cannot place gets a `PARSE_ISSUE` error on that line rather
|
|
109
|
+
than being dropped silently; that includes a declaration its object does not hold, such as a
|
|
110
|
+
misspelt `columm` under a table or a hierarchy's `level` that lost its tab. Each rule has a page at
|
|
111
|
+
https://pbiplint.com/rules with what it checks, why, how to fix it, and quirks.
|
|
75
112
|
|
|
76
113
|
The report layer (PBIR) is read beside the model: a `.Report` folder alone is valid input, and with
|
|
77
114
|
the model beside it the two are paired through `definition.pbir` and checked together. The report
|
|
@@ -90,4 +127,6 @@ https://github.com/pbiplint/pbiplint.
|
|
|
90
127
|
|
|
91
128
|
Copyright (C) 2026 McKinley Consulting. GNU Affero General Public License, version 3 or later; see
|
|
92
129
|
LICENSE. The vendored Microsoft ruleset and PBI Inspector rule metadata are MIT-licensed; see
|
|
93
|
-
NOTICE. The
|
|
130
|
+
NOTICE. The skill for AI assistants (`skill/SKILL.md`, which `pbiplint skill` prints and installs) is
|
|
131
|
+
MIT-licensed, so it can be committed to any repository; its notice is at the end of the file. The
|
|
132
|
+
name pbiplint and its logo are trademarks of McKinley Consulting.
|