bcquality/custom/knowledge/architecture/curabis-app-sources-must-be-checked-first.md
Michael Dieringer dd5637b1db Custom-laget bestaar nu begge CI-checks: 72 validator-fejl -> 0
Normalisering af alle 39 custom knowledge-filer til READ-kontraktens
skema (validate_frontmatter.py + Test-KnowledgeIndex.ps1 begge groenne):

- R01/R02: 28 filer manglede frontmatter eller brugte aeldre skemaer
  (title/category/severity/rule-id m.fl.) - alle har nu praecis de 6
  kraevede noegler; keywords haandskrevet pr. fil da de driver
  worklist-selektionen i INDEX/knowledge-index
- R09: manglende Description-sektion - regel-agtige foersteoverskrifter
  (Core Rule/Rule/Regel/Core Principle) omdoebt, eller sektion indsat
  efter titlen hvor intro-tekst fandtes
- R10: fenced code blocks konverteret til 4-space indrykkede blokke
  i alle filer (indhold uaendret)
- R11: 4 filer over 100 linjer fortaettet redaktionelt uden semantisk
  tab (ai-eval-scores 143->100, git-lifecycle 121->97,
  permission-sets 113->99, test-feature-scenario-tags 105->91)
- R05: AL0197->al0197, add_repo->add-repo; keyword-lister trimmet
  til maks 10

Ingen regler er fjernet eller aendret i betydning - kun form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 23:47:31 +02:00

79 lines
3.4 KiB
Markdown

---
bc-version: [all]
domain: architecture
keywords: [dependency, source, add-repo, github, curabis, closed-source, test, symbol, black-box]
technologies: [al]
countries: [w1]
application-area: [all]
---
## Description
CURABIS develops and maintains several AL apps that are consumed as dependencies
across many customer projects (Danelec, Jernpladsen, Wareco, KLB, etc.). When a
customer project imports one of these apps, it typically arrives as a compiled
`.app` symbol package in `.alpackages/` — not as source code.
This makes the app look like a closed external dependency. It is not.
Before treating any CURABIS-owned dependency app as a black box, the agent
must check whether its source is available via `add_repo` (GitHub). Reverse-
engineering compiled symbol packages (`SymbolReference.json`, `.app` manifest
inspection) is always an inferior substitute for reading the actual production
source, and produces lower-confidence tests and code reviews.
## Known CURABIS app repos
| App name | GitHub repo | Notes |
|---|---|---|
| Contract Management 365 app | https://github.com/Curabis/ContractMgmt365app.git | Main contract engine; depended on by most CURABIS customer projects |
| Project Management 365 app | https://github.com/Curabis/ProjectMgmt365app.git | |
| Cross Channel Management 365 app | https://github.com/Curabis/WebStore.git | |
| Summatim | https://github.com/MichaelDieringer/-summatim.git | Currently restricted — only mid has access; add_repo will fail for other team members |
*Expand this table when new CURABIS apps are created. If an app is not listed here,
ask `mid` whether source is available before reverting to symbol inspection.*
## Microsoft BCApps
Microsoft's own standard objects (Base Application, System Application, test
framework libraries: Library-Sales, Library-ERM, Library-Purchase, etc.) are
available at:
- https://github.com/microsoft/BCApps
Use `add_repo microsoft/BCApps` when you need to understand internals of
Microsoft standard codeunits (e.g. Sales-Post, Gen. Jnl.-Post Line, Copy Document
Mgt.) that are referenced by event subscribers but whose source is not visible in
the current project.
## Anti Pattern
// WRONG: reverse-engineering the compiled symbol package instead of reading source
// Agent parses SymbolReference.json from .alpackages/*.app to learn
// Contract Management table fields and public procedure signatures.
// Result: incomplete picture, missed validation logic, excluded feature from tests.
## Best Practice
// CORRECT: add the source repo and read it directly
add_repo Curabis/ContractMgmt365app
// Then read the actual table definitions, codeunits, and any Test Library
// codeunits that may already exist in the repo's own test app.
// If no Test Library exists in the dependency's test app:
// build GIVEN helpers in the consuming project's own Test Library codeunit
// based on the REAL table field definitions and trigger logic you can now read.
## When to apply this rule
Apply at the start of any task involving:
- Writing tests for production code that uses event subscribers on CURABIS-owned
codeunits or tables
- Calling public procedures from a CURABIS-owned app's codeunits
- Building GIVEN helpers for a CURABIS-owned app's tables
- Code-reviewing changes to codeunits that extend CURABIS-owned apps
If `add_repo` fails due to access restrictions (see table above), flag the
limitation explicitly rather than silently falling back to symbol inspection.