mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 09:26:52 +01:00
* Emit human-readable domain label on review findings Add an optional findings[].domain field to the DO review output contract so each finding carries its own human-readable review-domain display label. Leaf review skills set it on every finding they emit; the al-code-review super-skill copies it verbatim during rollup and sets it to "Agent" for its own cross-cutting agent findings. This decouples consumers from BCQuality's domain taxonomy: they render finding.domain verbatim instead of maintaining a sub-skill-id -> label map. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Define domain display-label constraints Clarify that review domains may contain internal whitespace, punctuation, case-sensitive text, and non-ASCII characters. Require consumers to preserve and safely encode the complete label instead of relying on lossy slugs, matching the replacement BC-ALAgents consumer. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 77d0a40e-8bf5-40ac-a450-40eb0255db03 --------- Co-authored-by: Jesper Schulz-Wedde <jesper.schulzwedde@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
91 lines
4.7 KiB
Markdown
91 lines
4.7 KiB
Markdown
---
|
|
name: bcquality-al-review
|
|
description: Review Business Central AL code changes using the BCQuality knowledge base. Use when reviewing an AL pull request, a working-tree diff, or a single AL file, and you want findings backed by BCQuality's curated, BC-specific quality rules.
|
|
---
|
|
|
|
# BCQuality AL review
|
|
|
|
This skill drives the BCQuality **Entry protocol** over the knowledge base that ships
|
|
inside this plugin. It is the plugin entry point for consumers (orchestrators, CLIs)
|
|
that do not already know BCQuality's internal conventions — the only convention they
|
|
need is "invoke this skill for an AL review."
|
|
|
|
BCQuality itself is orchestrator-agnostic content: knowledge files plus routing and
|
|
action skills. This bridge is the thin consumer glue that lets a plugin host run that
|
|
content without hardcoding BCQuality's layout.
|
|
|
|
## When to use
|
|
|
|
- Reviewing an AL pull request or an uncommitted working-tree diff.
|
|
- Reviewing a single AL file.
|
|
- Any task whose goal is "review Business Central / AL code for quality issues."
|
|
|
|
Do **not** use this skill to *generate* AL code — it only reviews.
|
|
|
|
## Plugin root
|
|
|
|
Resolve `PLUGIN_ROOT` to the directory that contains this plugin's
|
|
`.claude-plugin/plugin.json`. This skill lives at
|
|
`PLUGIN_ROOT/skills/bcquality-al-review/SKILL.md`, so `PLUGIN_ROOT` is two levels up
|
|
from this file. All paths below are relative to `PLUGIN_ROOT`. If the host exposes a
|
|
plugin-root environment variable, prefer it.
|
|
|
|
## Steps
|
|
|
|
1. **Refresh the knowledge index (best effort).** If `pwsh` is available, run
|
|
`pwsh PLUGIN_ROOT/tools/Build-KnowledgeIndex.ps1` from `PLUGIN_ROOT` to (re)generate
|
|
`PLUGIN_ROOT/knowledge-index.json` over the installed tree. This is a discovery
|
|
accelerator only — if `pwsh` is missing or the build fails, continue; the review
|
|
skills fall back to path-based discovery.
|
|
|
|
2. **Run Entry.** Read `PLUGIN_ROOT/skills/entry.md` and execute it against a
|
|
task context describing the review:
|
|
|
|
```yaml
|
|
task-context:
|
|
goal: "Review the AL changes for quality issues"
|
|
inputs-available: [pr-diff] # or [file-path] for single-file review
|
|
technologies: [al]
|
|
enabled-layers: [microsoft, community, custom] # see "Layer selection" below
|
|
```
|
|
|
|
**Layer selection.** `enabled-layers` defaults to all three layers. A host can
|
|
narrow it by setting the `BCQUALITY_ENABLED_LAYERS` environment variable to a
|
|
comma-separated subset (e.g. `microsoft` or `microsoft,community`); when set, pass
|
|
exactly those layers instead of the default. This is the plugin path's only knob
|
|
for layer policy — see the limitation in Notes.
|
|
|
|
Fill `bc-version`, `countries`, and `application-area` only when the caller
|
|
supplies them; omit them otherwise (an omitted dimension is unconstrained).
|
|
|
|
3. **Follow the dispatch record.** Entry returns a dispatch record naming the action
|
|
skill(s) to invoke — for a PR review this is normally
|
|
`microsoft/skills/review/al-code-review.md`. For each dispatched skill, read the
|
|
file and execute its Source → Relevance → Worklist → Action steps, reading
|
|
`PLUGIN_ROOT/skills/read.md` and `PLUGIN_ROOT/skills/do.md` on demand.
|
|
|
|
4. **Emit findings.** Produce the rolled-up findings report in the DO output contract,
|
|
including each review finding's producer-supplied `domain` label (`outcome`,
|
|
`findings`, `references`, `confidence`, `suppressed`). Do not invent a different
|
|
shape; downstream consumers parse the DO contract without skill-specific logic.
|
|
|
|
If Entry returns `no-match` or `failed`, return the dispatch record unchanged so the
|
|
caller can log the reason.
|
|
|
|
## Notes
|
|
|
|
- This skill adds nothing to BCQuality's knowledge or routing logic; it only bootstraps
|
|
the existing Entry protocol from a plugin host. Knowledge and skill changes belong in
|
|
the layers under `PLUGIN_ROOT/microsoft/`, `PLUGIN_ROOT/community/`, and
|
|
`PLUGIN_ROOT/custom/`, not here.
|
|
- **Layer pruning is coarser than the URL/clone model.** In the clone model a consumer
|
|
prunes its checkout to policy *before* the agent runs, and the knowledge index is
|
|
rebuilt over the pruned tree, so a denied layer can never leak into discovery. A
|
|
plugin install ships the whole tree, so this bridge can only *narrow discovery* via
|
|
`enabled-layers` (`BCQUALITY_ENABLED_LAYERS`) — the denied layers' files still exist on
|
|
disk. Treat `enabled-layers` as a selection filter, not a hard security boundary. A
|
|
future revision could add a genuine deny mechanism (e.g. pruning the installed tree).
|
|
- **Manifest location.** This plugin uses `.claude-plugin/plugin.json`, which both
|
|
Claude Code and Copilot CLI accept (verified with Copilot CLI: `plugin install`
|
|
reports the bridge skill loaded). Copilot CLI also accepts a root `plugin.json`; if a
|
|
future host only reads the root form, dual-home the manifest.
|