mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 22:56:55 +01:00
Merge upstream/main; adopt articles[] eval override, add sample-link READ convention
- Resolve conflicts in al-data-modeling-review.md by keeping both sides' additions (folder-path support, InitRecord/Round cues from upstream; the 9 document-distribution/pricing/barcode cues from this branch). - Switch the data-modeling evaluation override from an ad-hoc additionalArticles field to upstream's now-established articles[] convention (used elsewhere for finance/scm/query/reporting/style), removing the redundant parallel code path from Test-ReviewFixtures.ps1. - Fix all 9 new articles' sample references to the markdown-link READ convention required by Knowledge-Retrieval.ps1's Assert-SampleLink (plain backticks satisfy validate_frontmatter.py's regex alone but not this stricter check - both validators must pass). Validators: frontmatter 0/0, review-fixtures 126 cases/20 domains PASSED, knowledge-index 342 articles/575 samples PASSED, skill-index 19 review leaves PASSED. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
commit
e22352b248
504 changed files with 9501 additions and 1969 deletions
|
|
@ -2,10 +2,32 @@
|
|||
|
||||
The evaluation is convention-driven. The harness discovers every `<layer>/skills/review/al-<domain>-review.md` leaf across the enabled `microsoft`, `community`, and `custom` layers. Duplicate domains resolve with `custom > community > microsoft` precedence. For each selected leaf, the harness finds paired knowledge across the same layers, applies the same precedence to duplicate article slugs, selects the first article (by filename) with both `.bad.al` and `.good.al` companions, and derives the expected positive and clean control automatically. Adding a conforming leaf requires no scoring-contract edit.
|
||||
|
||||
`review-fixtures.json` contains only global thresholds and optional exceptional overrides. An override may select a different article or add context when the generic convention cannot express a scenario. It should remain empty in the normal case. An override may also list `additionalArticles` — other same-domain slugs (each with a `.good.al`/`.bad.al` pair) that get their own deterministic positive/clean case pair alongside the convention-selected one. Use this when a single leaf's worklist covers several distinct, newly-added rules and each one needs its own proof of reachability rather than riding on whichever article the generic convention happens to select.
|
||||
`review-fixtures.json` contains only global thresholds and optional exceptional overrides. An override may select a different `article`, add context when the generic convention cannot express a scenario, or use an `articles` array when one domain needs explicit regression coverage for several paired articles. Specify either `article` or `articles`, not both. The first selected article retains the stable `<domain>-bad` and `<domain>-good` manifest IDs; additional articles use slug-qualified IDs. Overrides should remain empty in the normal case.
|
||||
|
||||
Model-facing preparation hashes case IDs, neutralizes `Good`/`Bad` object-name tokens, and removes full-line sample comments so neither the article slug, domain, nor expected outcome reveals the answer.
|
||||
|
||||
The SCM `articles` override deliberately selects every rule in the initial
|
||||
functional domain, producing nine positive cases and nine clean controls.
|
||||
Business context is executable: document/status `TestField` guards,
|
||||
calculated-revaluation fields, source-transfer base quantities, warehouse
|
||||
reconciliation steps, and additional-demand promising parameters survive
|
||||
neutralization. Do not move those preconditions into comments or generic
|
||||
"posting" helper names; removing them can turn a real defect into a valid
|
||||
alternative workflow. The clean pairs exercise the supported APIs selected by
|
||||
the same routing cues, not merely unrelated code that contains no SCM tokens.
|
||||
|
||||
The Finance override deliberately covers every paired Finance article, not
|
||||
only the first filename. Its shared context supplies the target version and
|
||||
localization but deliberately omits application area, as production callers
|
||||
often do. Finance applicability must come from its source-surface gate, not
|
||||
an artificial evaluation-only area hint. Scenario prerequisites live in
|
||||
executable AL: the document-balance cases check the template setting, and the
|
||||
VAT cases encode the imported net/VAT/gross totals and applicable VAT mode.
|
||||
Do not move these prerequisites into comments that preparation removes.
|
||||
Clean samples also retain supported operational edits, temporary ledger/set
|
||||
buffers, legitimate entry-number APIs, and reads of individual shortcut
|
||||
dimensions so these exceptions are exercised rather than blanket-excluded.
|
||||
|
||||
## Validate the corpus
|
||||
|
||||
```powershell
|
||||
|
|
@ -26,7 +48,7 @@ This credential-free check proves every selected leaf maps to a same-named knowl
|
|||
|
||||
2. For a fast/small model, use one fresh invocation per `request-case-*.json`. Each request embeds the exact leaf instructions, that domain's candidate index rows with authoritative paths, and one opaque case. The model opens only matching articles and copies finding IDs from `candidateArticles[].path`. Save each response with the matching `result-case-*.json` name in the same directory.
|
||||
|
||||
`request-<domain>.json` files provide optional two-case leaf batches and identify the selected layer-owned skill path; save those as `result-<domain>.json`. Directory scoring prefers `result-case-*.json` when present and otherwise falls back to `result-*.json`. `review-request.json` is an optional all-domains stress test for larger models. Neither batch form is the preferred fast-model profile.
|
||||
`request-<domain>.json` files provide optional leaf batches containing every selected case for that domain and identify the selected layer-owned skill path; save those as `result-<domain>.json`. A normal convention-selected domain has one bad/good pair, while an `articles` override contributes one pair per listed article. Directory scoring prefers `result-case-*.json` when present and otherwise falls back to `result-*.json`. `review-request.json` is an optional all-domains stress test for larger models. Neither batch form is the preferred fast-model profile.
|
||||
|
||||
3. Save only this result shape:
|
||||
|
||||
|
|
@ -36,7 +58,7 @@ This credential-free check proves every selected leaf maps to a same-named knowl
|
|||
{
|
||||
"id": "case-a1b2c3d4",
|
||||
"findings": [
|
||||
{ "id": "microsoft/knowledge/appsource/object-affixes-prevent-collisions.md" }
|
||||
{ "id": "microsoft/knowledge/appsource/permission-sets-cover-setup-and-usage-without-super.md" }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -7,15 +7,12 @@
|
|||
"agents": {
|
||||
"article": "wire-all-three-agent-interfaces"
|
||||
},
|
||||
"appsource": {
|
||||
"context": "AppSourceCop mandatoryAffixes is configured to ABC."
|
||||
},
|
||||
"breaking-changes": {
|
||||
"article": "do-not-expose-sensitive-data-through-public-api"
|
||||
},
|
||||
"data-modeling": {
|
||||
"article": "check-blocked-in-referencing-code-not-in-master",
|
||||
"additionalArticles": [
|
||||
"articles": [
|
||||
"check-blocked-in-referencing-code-not-in-master",
|
||||
"extend-report-selection-usage-for-new-document-types",
|
||||
"document-print-and-email-actions-call-report-selections-directly",
|
||||
"custom-document-dispatch-must-not-bypass-report-selections",
|
||||
|
|
@ -30,17 +27,76 @@
|
|||
"events": {
|
||||
"article": "reset-ishandled-only-when-the-value-can-carry-over"
|
||||
},
|
||||
"finance": {
|
||||
"articles": [
|
||||
"apply-ledger-entries-through-application-codeunits",
|
||||
"change-ledger-due-dates-through-entry-edit",
|
||||
"do-not-edit-shared-dimension-sets",
|
||||
"do-not-modify-or-delete-posted-ledger-entries",
|
||||
"normal-vat-journal-amount-includes-vat",
|
||||
"post-ledger-entries-through-posting-codeunits",
|
||||
"preserve-journal-batch-document-balance",
|
||||
"reverse-transactions-by-transaction-number",
|
||||
"write-dimensions-as-dimension-set-entries"
|
||||
],
|
||||
"context": "Target Business Central 28, worldwide standard application (w1). Review each file as an independent source input."
|
||||
},
|
||||
"interfaces": {
|
||||
"article": "set-defaultimplementation-on-enum"
|
||||
},
|
||||
"performance": {
|
||||
"article": "use-isempty-for-existence-check"
|
||||
"articles": [
|
||||
"use-isempty-for-existence-check",
|
||||
"job-queue-category-code-serializes-conflicting-jobs",
|
||||
"job-queue-external-effects-must-be-idempotent",
|
||||
"job-queue-handlers-must-not-require-ui",
|
||||
"job-queue-handlers-must-propagate-failures",
|
||||
"job-queue-on-hold-does-not-stop-running-work",
|
||||
"store-scheduled-task-id-to-avoid-duplicate-tasks"
|
||||
]
|
||||
},
|
||||
"privacy": {
|
||||
"article": "no-pii-in-telemetry-message-string"
|
||||
},
|
||||
"query": {
|
||||
"articles": [
|
||||
"dataitemtablefilter-cannot-be-overwritten-at-runtime",
|
||||
"reopening-query-resets-cursor-but-keeps-filters",
|
||||
"set-query-filters-before-open",
|
||||
"setfilter-overwrites-query-columnfilter"
|
||||
]
|
||||
},
|
||||
"reporting": {
|
||||
"articles": [
|
||||
"clear-report-variable-before-independent-runmodal",
|
||||
"currreport-break-ends-the-current-trigger",
|
||||
"currreport-quit-rolls-back-and-skips-onpostreport",
|
||||
"currreport-skip-does-not-stop-trigger-code",
|
||||
"report-output-in-a-loop-needs-one-client-download",
|
||||
"reportextension-dataitem-trigger-order-is-explicit",
|
||||
"reportextension-report-triggers-run-after-base-triggers",
|
||||
"settableview-cannot-broaden-dataitemtableview",
|
||||
"stop-when-runrequestpage-returns-empty-parameters"
|
||||
]
|
||||
},
|
||||
"scm": {
|
||||
"articles": [
|
||||
"post-item-ledger-changes-through-item-journals",
|
||||
"post-revaluation-through-the-item-journal-batch",
|
||||
"change-item-applications-through-posting-routines",
|
||||
"cancel-reservations-through-reservation-management",
|
||||
"transfer-item-tracking-through-source-reservation-codeunits",
|
||||
"reconcile-warehouse-adjustments-with-the-item-ledger",
|
||||
"post-transfers-through-shipment-and-receipt-codeunits",
|
||||
"use-date-aware-availability-for-promising",
|
||||
"carry-out-requisition-actions-through-the-standard-workflow"
|
||||
]
|
||||
},
|
||||
"style": {
|
||||
"article": "label-comment-explains-placeholders"
|
||||
"articles": [
|
||||
"label-comment-explains-placeholders",
|
||||
"dateformula-evaluate-needs-language-independent-literals"
|
||||
]
|
||||
},
|
||||
"telemetry": {
|
||||
"article": "telemetry-event-id-stable-unique"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue