[5.0.0] - 2026-09-18
Supersedes the unreleased 4.3.1 and 4.4.0: neither was ever tagged or published,
the Marketplace still carries 4.2.0, and this release contains every commit of
both. One delivery, one changelog entry, one tag. The major is for the plugin
layout and the per-surface artifact roots below; everything else is additive.
Breaking Changes
- The Claude Code plugin is generated, and its layout changed.
commands/no
longer exists: the ten slash commands are skills withdisable-model-invocation,
and/aldc:al-agent-instructions-createis now/aldc:al-agent-instructions.
rules-templates/is nowrules/. Agent frontmatter no longer declares
maxTurns. Re-run/aldc:al-initializeafter upgrading. - Requirement artifacts follow the surface. A project worked from Claude Code
keeps its plans under.claude/plans, and one worked from Codex under
.agents/plans, with audits alongside them. Copilot and the VS Code extension
keep.github/plans. Every consumer now readsplans.rootandaudits.root
fromaldc.yaml, so a project that wants the old location sets it there and
nothing else changes. Move the folder or declare the root; the shipped
aldc.yamlis seeded and never overwrites a project's own. - The VS Code extension's Viewer reads
.github/plans, so it does not yet see
plans written from Claude Code or Codex. That is tracked in the extension
repository and is not addressed here.
Added
-
VS Code extension 4.3.0 (distributed separately as the VSIX): the Project Manager
panel and Explorer view to install, update, verify, restore and run Doctor with
previews and confirmations; the ALDC Visor tree of plan artifacts per requirement;
theAL Collection: Run Doctorcommand rendering the packaged Doctor report. -
Bilingual installation journey with a surface selector for VS Code, Copilot CLI,
Claude Code and Codex, copyable steps and a bounded first request. Published
extension and source routes are explicitly separated. -
Structured installer output for hosts:
install,status,verify-installand
rollbackaccept--json. Previews carry a plan digest and--expect-plan
refuses to apply a plan that changed after the preview. Each file reports whether
a replace overwrites a local customization. Human output is unchanged. -
Upgrades from a release that recorded no receipt no longer ask about the toolkit's
own untouched files.known-installations.jsonrecords what previous releases
wrote at each path, generated by installing each release from its tag
(npm run build:known-hashes), so the installer recognises its own content and
reserves the collision question for files that were really edited. Upgrading an
untouched 4.2.0 installation with two customized files goes from 35 collisions to
2. The manifest is consulted only when no receipt exists, never for seeded files,
and every replacement is still previewed, backed up and reversible. -
solutionanchor inaldc.yaml:workspaceFileandroots.application/
roots.testdeclare the multi-root layout of the AL solution. The installer
detects the folders that exist (AL-GoappFolders/testFoldersfirst, then
discovery) and writes them there; it never creates a folder. -
aldc solutionreports the declared layout against the folders on disk and, with
--write, rewritessolution.rootsin place: the two values change and every
comment and every other setting inaldc.yamlsurvives, with the previous file kept
under.aldc-install. A root that still holds itsapp.jsonis never overridden —
with several apps only the developer knows which one the solution means — and a root
that lost its manifest is reported, never cleared. Detection used to run only at
installation, so a customizedaldc.yamlfroze the layout it was installed with. -
aldc.code-workspaceis generated from that layout at installation instead of
copied: root, application, tests, and the BCQuality root when the configured mode
is external-multiroot. It stays a seeded file, so it is written once and then
belongs to the developer. -
The installation marker records the installed version, and
statusreports it as
installedVersionso a host can compare it with what it packages. Markers written
before this release reportnulland are never repaired. -
tools/bcquality/config.jsreportstoolkitRootandsolutionalongside the
BCQuality configuration, so every Node consumer reads one source of truth. Doctor
still receives--toolkitexplicitly, now resolved by its caller from that value. -
Doctor reports manifests that declare different BC application targets (for
example an App on BC28 next to a Test on BC27) as an advisory configuration
problem. The exit code is unchanged; the compiler adjudicates. -
Read-only installation inspection (
inspect) reporting absent, invalid, matching
and drifted receipts and whether the last transaction can be restored. Receipts
whose file map is not an object or contains an unsafe path are reported as
invalid, never thrown or planned against.statusandverify-installreport
the target recorded by the receipt (receiptTarget) and refuse to verify another
requested--target-dir(targetMismatch). -
Developer Reviewer for independent direct-increment review, with a shared review
pipeline, one bounded correction round and human approval. -
Explicit BCQuality plugin mode alongside external multiroot, with shared provider
identity, stage evidence and native fallback rules across review agents. -
Doctor configuration snapshots and BCQuality observations distinguish discovery,
loading, execution and best-effort knowledge-index generation. -
Architecture-led specification decomposition with stable unit ownership, separate
authoring/implementation dependencies and joint review of current revisions. -
Dedicated Spec Agent and a shared specification entrypoint, with human approval
before implementation and contracts proportionate to requirement complexity. -
Read-only Doctor diagnostics for specification, App compilation, Test compilation
and test execution, with configuration and runtime observations reported separately. -
Opt-in BC29-native profile for Copilot Chat, with role-specific AL tool permissions
and AL18 guidance. BC28 remains the default for new installations. -
Canonical adapters for Claude Code, Copilot CLI and Codex, with generated content
integrity checks and project initialization. -
Installation previews, collision reporting, verification receipts and recoverable
updates that preserve existing project memory and protect subsequent edits. -
BCQuality knowledge index. The multiroot installers build it through PowerShell 7
right after the pinned checkout and record a receipt naming the corpus revision it
was built over;aldc bcq-index [--build]reports that state and builds it on
request, andaldc statusshows it with the command to fix it. This earns a new
index state,prebuilt: weaker thangenerated, because it asserts a prior
authorized build rather than one in this invocation, and claimable only with the
receipt's generator, index path, SHA-256 and corpus revision. Missing PowerShell 7
is never fatal — reviewers fall back to path-based discovery. -
BCQuality in the design phases. Until now the knowledge layer was reachable only
during review, so an architect could contradict a house rule and learn about it
from a finding two phases later, and a spec could declare acceptance criteria
unrelated to the knowledge the reviewer would judge against. Architect and Spec
Agent now read the corpus as context. -
docs/templates/bcquality-design-guidance.mdis the single source of the read
path: where the corpus lives, which frontmatter filters decide inclusion, layer
precedence (custom over community over microsoft, recording the displaced path),
how to select without loading the index, the selection file to write and the
evidence line to carry. Both roles link it; neither copies it. Every step is a
directory listing or a file read, so it works on hosts where a role cannot
execute anything, and it needs no PowerShell, no Node and no index. -
The architect writes
{req}.bcq-constraints.md— house rules first and
uncapped, then platform constraints by design area — and{req}.bcq-selection.json.
Deviating from a house rule is allowed and recorded with its reason in the
architecture decisions; it reaches the human gate that already exists. -
The spec declares, under section 11, a Review criteria (BCQuality) table:
one row per object with the cited knowledge path, what the reviewer will check
and the layer, mirrored to{req}.bcq-criteria.json. The table states what will
be reviewed; it does not judge the spec. -
review.criteriain the review report: each declared criterion comes back met,
unmet or not evaluated, with house rules counted separately, and the Conductor
renders the delta in the Checkpoint card and the phase-complete document. -
One author for every surface.
claude-plugin/was the only place in the
repository with hand-written primitives, and.claude/, the Copilot CLI plugin
and the Codex plugin are generated from it — so all three inherited its drift
from the canonical trees that ship in the VSIX. The generator now emits every
file of all three packages, and the line that adopted anything it did not produce
is gone: delete a package, regenerate, and it returns byte-identical. -
Each adapted file carries the path and SHA-256 of its canonical source, plus a
binding table translating every Copilot surface to its host equivalent. The
adapter may change four things — frontmatter, paths, tool vocabulary and that
preamble — and nothing else. -
Role entry skills for the nine user-invocable roles (
/aldc:architect,:spec,
:conduct,:develop,:review,:triage,:presales,:agent-builder,
:audit). The three TDD subagents areuser-invocable: falsein the canonical
and get none; only the Conductor launches them. -
al-agent-build-instructionsexists as a workflow on Claude Code for the first
time, and the twelve Codex role profiles declaresandbox_mode, derived from the
tool grant each canonical contract already makes.
Changed
-
aldc.code-workspaceis now a seeded file: the installer creates it when it is
missing and never replaces it afterwards, not even with--force. The multi-root
workspace definition belongs to the developer, like project memory. Previously a
profile switch or a replace policy overwrote a customized workspace file. -
Aligned canonical package, plugin and catalog versions to 4.3.0 for the
upcoming release; previously built artifacts remain unchanged. -
Specifications capture technical contracts and acceptance criteria without
anticipating AL implementation bodies at MEDIUM complexity. -
Agent routing preserves approved architecture and passes approved specifications
to Conductor or Developer according to complexity. -
Instruction and domain-guide references are retained for continuation from the
current artifacts; native capabilities can satisfy relevant tool requirements. -
The configured BCQuality skill is
al-code-reviewat 0.2.0. The previous default
named a skill upstream had removed, so plugin mode looked for something that no
longer existed, found nothing, reported nothing and silently reviewed with native
rules only. An installation exposing the pre-0.2.0 name is now an incompatible
provider, never a renamed match. -
pilotSkillsis empty, which means the full corpus. It previously pinned the run to
three review leaves, so fifteen never executed; Entry's own relevance decides now,
and a leaf whose domain the diff does not touch returns not-applicable cheaply.
Entry can also dispatch more than one first-level skill, so every returned report is
retained instead of only the first. -
Review findings gate on evidence, not severity alone. A finding gates when it is
blocker/majorand either knowledge-backed atconfidence: highor a native
check with an applicable rule; native checks gate on severity alone, because their
capped confidence records the absence of a citable article, not doubt. Agent
findings never gate. Only gating findings and non-gating findings carrying
suggested-codebecome implementer work; the rest are recorded as recommendations.
Conductor recomputes this fromfindings[], sincesummary.countscannot express it. -
The evidence validator checks what it previously only carried:
severityand
confidenceagainst their vocabularies, a cited finding'sidagainst
references[0].path, and the advisory caps onnative:/agent:findings. -
The review phase closes that loop without gaining authority over it. Reporting
the criteria is bookkeeping over findings that already exist: it adds no finding,
changes no severity and never alters the verdict, which still depends only on
findings[]. -
validate_evidence.pychecks the two things a criteria block can get wrong: the
buckets must add up to what was declared, and an unmet criterion must be cited by
a finding that actually exists — matched across sub-results, where provider
findings live. -
Four of the eight always-on AL rules had been widened to every
.alfile in the
Claude Code plugin, applying Codeunit- and Query-scoped guidance where it does not
hold. Each generated rule now declares exactly the globs its canonicalapplyTo
declares.al-agent-toolkithad also lost its description and its four specific
globs. -
The human gate that Copilot's
handoffs:button supplied has no equivalent in
Claude Code or Codex, where an agent delegates through a tool with no click. It is
carried as an adapter concern — a row in the mapping table, a line in the Codex
host preface — rather than as canonical text that would restate for Copilot what
its own host already enforces. -
Six agent descriptions gained the sentence that says when to use them, and
al-developer's was corrected: it claimed the agent builds via the terminal and
validates with tests, which stopped being true.
Removed
skill-manifest, the end-of-pipeline handoff contract for the sibling
collections CIRCE (Copilot Studio) and DELFOS (Power BI). It shipped in the
VS Code and npm distributions and was absent from the Claude Code, Copilot CLI
and Codex plugins; it is now withdrawn from every surface, along with its
declaration inaldc.yamland its row in the Core Spec. Projects that already
installed it keep the files on disk; the installer stops writing them.
Fixed
-
The BCQuality index was invisible from every package.
aldc statusreported it
unobservedwhatever its real state andaldc bcq-indexcould not load at all,
because the installer required../tools/bcquality/index-stateliterally — a path
that exists only in this repository. Packaged,install.jssits at the package root
with the toolkit trees whereverALDC_PACKAGE_DIRpoints, which is how the payload
it copies was already resolved; the index now resolves the same way. The gap was that
nothing ever ran the installer from that shape, so a new test does, and a require
written against__dirnamenow fails there instead of in someone's editor. -
Requirement-set validation never ran.
tools/aldc-validateread only the flat plans
root, while every agent and workflow writes.github/plans/{req_name}/{req_name}.*.md,
soincompleteRequirementSetsreported "no requirement sets found" on every correctly
laid out project and a requirement missing its test-plan passed clean. The validator now
reads each requirement folder, treats the folder name as the requirement, accepts the
Architect-assigned unit specs of a decomposed requirement in place of{req}.spec.md,
skips the archive folder, and reports contracts left in the plans root instead of
ignoring them. The specification said flat where the contracts say folder-per-requirement;
it now says folder-per-requirement, and states that the plans root is host-neutral
(configurable underplans.root, the same location for every surface) unliketoolkitRoot. -
The installer and Doctor now read the same solution. The installer walks for
app.json(at most three levels, pruning hidden folders, dependencies, build
output and symlinks) instead of probingsrc,app,testandtests, and both
treat a folder ending in.Testor.Testsas the test project. AL-Go names the
app folder after the app, so the usual layout —MiExtensionnext to
MiExtension.Test— previously leftsolution.rootsempty and the generated
workspace without its project folders, while Doctor classified the suite as a
second app. -
Doctor reads the solution, not just the folder it was pointed at. A manifest was
classified by the path segments below the scanned root, so scanning the test folder
itself left no segment to judge by and its suite was reported as an application; the
scanned folder's own name now answers for a manifest at the root. Configuration is
read per project as well: the.vscodeof every discovered project, not only the
root's, which is wheremcp.json,settings.json,tasks.jsonandlaunch.json
actually live in an AL-Go layout. Pointed atapp/ortest/Doctor reported no
plans folder and no MCP servers while both existed one level up or down — a solution
read as three unrelated projects. -
Review coverage now distinguishes provider execution from index generation and
incomplete audits from zero-finding completed reviews. Dredd remains advisory
and supports explicit file scope and chat-only reports when writes are forbidden. -
Profile projection with CRLF files, packaged template references and cross-host
role links. -
Incomplete payloads, installation recovery edge cases and inconsistent role counts.
-
Package provenance no longer lists derived build artifacts as sources. Python
writes__pycache__the first time a shipped script is imported, so it exists on
a developer's disk and in a real installation but never in a clean checkout;
listing one made the Copilot CLI, Claude and Codexsync --checkruns drift on
CI while passing locally, and would make a user's own installation look tampered
with. Shipped sources are still hash-checked individually.
Compatibility
- Node.js 20+ for command-line installation; Python 3.9+ for Doctor.
- BC29-native selection does not upgrade BC, AL Language or project manifests.
- Extension and registry releases are separate; canonical package, plugin and catalog
metadata declare 4.3.0. Earlier VSIX files retain their original version. - Persisted BCQuality evidence written before this release may now fail the
bcquality-evidenceworkflow: reports carrying an invalidseverity, a cited
finding whoseidis not its knowledge path, or anagent:finding at
blocker/majorwere always outside the contract and were simply not checked.
Re-run the review to regenerate the report; the reports themselves are evidence and
are not edited by hand. aldc bcq-indexexits 1 when a usable index is missing on a machine that could
build one, so a script can branch on it. It exits 0 when there is nothing to do,
including on a machine without PowerShell 7, where no run could build one.
What's Changed
- fix(conductor): ruta .github/-prefijada para las micro-reglas (resto … by @javiarmesto in #76
- docs(spec): Core Spec v1.2 - tiers normalizados, BCQuality, tooling d… by @javiarmesto in #77
- chore(f2): .claude/ como espejo del plugin con check en CI + banners … by @javiarmesto in #78
- docs: restructure README presentation with hero banner and discovery-first layout by @javiarmesto in #80
- docs: use blueprint PNG as README hero banner by @javiarmesto in #81
- feat(claude-plugin): remove skill-extension-manifest (CIRCE/DELFOS) by @javiarmesto in #88
- fix(plugin): add root marketplace.json so remote /plugin install works (#84) by @javiarmesto in #85
- Use the official Microsoft Learn MCP endpoint for microsoft-docs by @DigiTecKid in #90
- feat(brand): align ALDC with the Open Engineering visual identity by @javiarmesto in #93
- refactor(brand): simplify and strengthen the ALDC mark by @javiarmesto in #94
- refactor(brand): move ALDC toward an engineering notebook by @javiarmesto in #95
- Github Copilot plugin by @lewishyettFGT in #96
- fix(claude-plugin): remove leftover VS Code Copilot tool references by @javiarmesto in #89
- feat: adaptación BC29/AL18 para Copilot Chat y plugins Claude/CLI by @javiarmesto in #97
- feat: recoverable canonical plugin packaging and Codex bootstrap by @javiarmesto in #100
- feat: canonical Doctor with independent operation readiness by @javiarmesto in #101
- feat: canonical Spec Agent with shared contract and host adapters by @javiarmesto in #102
- feat(claude-plugin): generate the whole plugin from the canonical sources by @javiarmesto in #104
- feat(codex): plans root, audits root, sandbox_mode and a manifest verified against the host by @javiarmesto in #105
- release: ALDC 5.0.0 — one delivery across every surface by @javiarmesto in #103
- fix(install): resolve the BCQuality index from the package, not from this repo by @javiarmesto in #106
New Contributors
- @DigiTecKid made their first contribution in #90
- @lewishyettFGT made their first contribution in #96
Full Changelog: v4.2.0...v5.0.0