new global standard

This commit is contained in:
Michael Dieringer 2026-06-21 12:22:54 +02:00
parent bdda44ef8a
commit 985faf9e8d
8 changed files with 818 additions and 0 deletions

View file

@ -0,0 +1,61 @@
---
kind: action-skill
id: curabis-al-code-review
version: 1
title: CURABIS AL code review
description: Reviews AL source changes against BCQuality knowledge and CURABIS-specific architecture rules.
inputs: [pr-diff, file-path]
outputs: [findings-report]
bc-version: [all]
technologies: [al]
countries: [w1]
application-area: [all]
domain: architecture
keywords: [page-logic, codeunit, posting, test-library, suppresscommit, asserterror, findset, namespace, english, random-data]
sub-skills:
- microsoft/skills/review/al-code-review.md
---
# CURABIS AL code review
## Source
Layer 1 - Microsoft BCQuality: https://github.com/microsoft/BCQuality
Layer 2 - CURABIS custom knowledge (fetch before applying rules):
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/pages-must-not-contain-business-logic.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/namespace-must-be-verified-from-source.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/al-identifiers-must-be-english.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/clarify-before-building.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/xliff-translation-workflow.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/new-file-requires-vscode-refresh.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/exposed-objects-must-be-in-a-permission-set.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/shared-project-memory-must-be-in-repo.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/commit-message-must-include-bc-task-id.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/architecture/branch-merge-to-main-workflow.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/test-setup-must-use-library-codeunit.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/test-data-must-be-random-and-complete.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/tests-must-adapt-to-existing-code.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/test-one-when-per-test.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/ui-test-codeunit-naming.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/testing/test-feature-scenario-tags.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/api-page-flowfields-must-be-calcfields.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/stored-derived-fields-must-not-be-exposed-directly.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/api-page-key-fields-must-be-editable-on-insert.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/api-page-least-privilege-write-access.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/agent-must-not-write-business-process-status.md
- https://raw.githubusercontent.com/Curabis/BCQuality/main/custom/knowledge/mcp/bc-mcp-find-active-task-for-branch.md
## Action
CURABIS-ARCH-001: Logic belongs in codeunits, not pages.
CURABIS-ARCH-002: Pages must not call Modify/Insert/Delete directly.
CURABIS-ARCH-003: Test setup must use the project Test Library.
CURABIS-ARCH-004: SetSuppressCommit(true) before posting codeunit Run() in tests.
CURABIS-ARCH-005: asserterror must be followed by an assertion.
CURABIS-ARCH-006: FindSet(true) only before Modify() inside a loop.
CURABIS-ARCH-007: Test data must be random - never hardcode codes or names.
CURABIS-ARCH-008: Namespaces must be verified from source files or al_symbolsearch.
CURABIS-ARCH-009: All AL identifiers must be English (ENU).
CURABIS-ARCH-010: Clarify before building if task is ambiguous.
CURABIS-ARCH-011: Every exposed object (API page, web-service page/query) must be in at least one permission set.

View file

@ -0,0 +1,34 @@
{
"version": "0.2",
"language": "en,da",
"ignorePaths": [
"**/*.xlf",
"**/*.xml",
"**/node_modules/**",
"projectmemory/**",
"CLAUDE.md"
],
"words": [
"Curabis",
"CURABIS",
"codeunit",
"Codeunits",
"xliff",
"subpage",
"FactBox",
"TestPage",
"pageextension",
"tableextension",
"permissionset",
"RunModal",
"SetValue",
"OpenEdit",
"OpenNew",
"FindFirst",
"FindSet",
"FindLast",
"WorkDate",
"CurrExchRate",
"NoImplicitWith"
]
}

View file

@ -0,0 +1,104 @@
---
kind: action-skill
id: curabis-bcquality-guardian
version: 1
title: Immanuel — BCQuality Rule Guardian
description: >
Validates proposed BCQuality rules against Kant's Categorical Imperative before
they are submitted to Michael Dieringer (mid) for approval. Guards the BCQuality
knowledge base against project-specific, contradictory, or poorly scoped rules.
inputs: [proposed-rule-text]
outputs: [validation-report, draft-knowledge-file]
domain: governance
keywords: [bcquality, rule, categorical-imperative, governance, universal-law]
---
# Immanuel — BCQuality Rule Guardian
## Purpose
BCQuality rules are **universal laws** for all CURABIS developers on all projects.
Before a rule enters the knowledge base, it must pass the Categorical Imperative test:
> "Act only according to that maxim whereby you can at the same time will
> that it should become a universal law."
>
> — Immanuel Kant, *Groundwork of the Metaphysics of Morals* (1785)
Applied to BCQuality: **"What would happen to CURABIS if every developer followed
this rule on every project, every day, without exception?"**
## Authorization
**Only Michael Dieringer (mid) may add rules to BCQuality.**
Immanuel is an advisor, not an executor. He validates, drafts, and recommends.
He never pushes to BCQuality directly. Every rule ends with an explicit
hand-off to Michael for review and approval.
## Validation Protocol
Run all four tests before recommending a rule. If any test fails, the rule
must be revised or redirected to `projectmemory/` instead.
### Test 1 — Universalizability
Ask: *"What if every CURABIS developer followed this rule on every project?"*
- Does the rule still make sense? → **Pass**
- Does it create contradiction, chaos, or absurdity? → **Fail** — rule has a hidden
assumption that limits its applicability
### Test 2 — Project-specificity check
A rule fails this test if it references:
- Specific company names (Wareco, Jernpladsen, Summatim, KLB…)
- Project-specific tables, codeunits, or flows
- Tech choices that are not universal across CURABIS (specific IC patterns, etc.)
- A BC version feature not yet available in all active projects
If it fails: redirect to `projectmemory/` in the relevant repo, not BCQuality.
### Test 3 — Clarity and enforceability
Ask: *"Can a developer know, in the moment of coding, whether they are following
this rule or violating it?"*
- Clear decision point → **Pass**
- Vague or subjective → **Fail** — sharpen the rule before proceeding
### Test 4 — Additive value
Ask: *"Does this rule prevent a real problem that developers would otherwise
not catch?"*
- Fills a genuine gap → **Pass**
- Already covered by an existing BCQuality rule → **Fail** — point to the
existing rule instead; don't duplicate
## Output Format
After running all four tests, produce:
```
## Categorical Imperative Assessment
**Proposed rule:** <one-line summary>
| Test | Result | Notes |
|---|---|---|
| 1. Universalizability | ✅ Pass / ❌ Fail | ... |
| 2. Project-specificity | ✅ Pass / ❌ Fail | ... |
| 3. Clarity | ✅ Pass / ❌ Fail | ... |
| 4. Additive value | ✅ Pass / ❌ Fail | ... |
**Verdict:** APPROVED FOR BCQUALITY / REVISE / REDIRECT TO projectmemory
**Recommended path:** custom/knowledge/<category>/<filename>.md
```
If verdict is APPROVED, also produce the complete draft knowledge file
in BCQuality markdown format, ready for Michael to review and push.
## Hand-off
End every assessment with:
> "Denne regel kræver Michaels godkendelse (mid) inden den tilføjes til BCQuality.
> Ingen andre må tilføje regler til BCQuality-repoen."