AL plan guidance (preview)
This is BCQuality's host-native adapter for applying knowledge to an existing AL development plan. It is a preview: the underlying contract may change based on pilot feedback. It is not a BCQuality action skill and contains no routing or knowledge-selection policy. Its only responsibility is to translate the caller's request into an Entry task context and execute the resulting dispatch.
The adapter is read-only. It never creates or rewrites the plan, edits source, writes generated files into the caller's repository, runs tests, or implements the change.
Execute
- Resolve
PLUGIN_ROOTto the directory containing this plugin's rootplugin.json. This file isPLUGIN_ROOT/skills/al-plan-guidance/SKILL.md; when the host does not expose the plugin root, resolve it two levels above this file. - Identify the caller's existing plan: a plan file path, plan text in the request, or a plan the caller explicitly identifies in the conversation. If no plan is available, ask the caller for one. Do not generate a plan; this skill enriches an existing one.
- Build the
task-contextrequired byPLUGIN_ROOT/skills/entry.md:- Copy the caller's actual request verbatim into
goal. - Set
inputs-availabletodevelopment-plan, plusrepositorywhen the caller's AL repository or app folder is readable. Pass the complete plan content asdevelopment-planand the repository path asrepository; for a request in the caller's working directory, use that directory. - Set
technologies: [al]. - Pass
bc-version,countries, andapplication-areaonly when supplied or reliably determined from the plan or repository. - If
BCQUALITY_ENABLED_LAYERSis set, split its comma-separated value and pass the trimmed, non-empty entries asenabled-layers; otherwise omit the field and let Entry apply its default. - If
BCQUALITY_DISABLED_SKILLSis set, split its comma-separated value and pass the trimmed, non-empty entries asdisabled-skills; otherwise omit the field.
- Copy the caller's actual request verbatim into
- Read and execute
PLUGIN_ROOT/skills/entry.mdexactly as written, including its Preparation step. Entry is authoritative for index freshness, routing, defaults, and failure behavior; this adapter must not duplicate or weaken those rules. Resolve every repo-relative path Entry names againstPLUGIN_ROOT, not the caller's working directory. Run Preparation's index build aspwsh PLUGIN_ROOT/tools/Build-KnowledgeIndex.ps1. IfPLUGIN_ROOTis inside the caller's repository, pass-IndexPathto a location outside that repository and supply the resulting index path to the dispatched skill. Ifpwshis unavailable or the build fails, continue with READ's path-based discovery; a failed build is not empty knowledge. - Follow Entry's How the agent uses the dispatch instructions. Invoke only
the returned action skills, pass each dispatch entry's exact input subset,
and read
PLUGIN_ROOT/skills/read.mdandPLUGIN_ROOT/skills/do.mdon demand. - Return each dispatched development guidance report unchanged. If Entry
returns
no-matchorfailed, return its dispatch record unchanged.
The internal microsoft/skills/development/al-development-plan.md action skill
selects and converts the applicable knowledge. This adapter never selects
articles itself.
Using the result
Give the guidance report to the agent implementing the plan, together with the
plan itself. After implementation, review the completed change with
al-code-review; the guidance report is input to the work, not proof that the
result is correct.
Layer selection is not a deny mechanism
A plugin install ships the whole BCQuality tree, so enabled-layers here can
only narrow discovery: the files of a layer left out of the list still exist
on disk. Treat BCQUALITY_ENABLED_LAYERS as a selection filter, never as a
security boundary. A host that needs a genuine deny mechanism must prune the
installed tree itself.


