mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 14:46:55 +01:00
Close AL development contract gaps
Bound post-implementation review rounds, expose output kinds in Entry dispatch, enforce capability coverage, map BCFIX-HANDOFF v1, clarify no-knowledge behavior, and reject repository-escaping skill paths. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 638b66d2-9f06-4f60-8781-808709e1485c
This commit is contained in:
parent
56b80e6dcf
commit
f6fca1d56d
15 changed files with 356 additions and 52 deletions
|
|
@ -83,7 +83,8 @@ pwsh ./tools/Test-DevelopmentFixtures.ps1 -Root . -ResultsDirectory ./.developme
|
|||
|
||||
The initial fixtures cover setup-backed master data, document header/line
|
||||
workflows, versioned API integrations, and surgical diagnosis and repair of a
|
||||
batch-processing bug. The broader capability roadmap lives in
|
||||
batch-processing bug, plus a rerunnable data upgrade. The capability manifest
|
||||
enforces a minimum fixture-backed coverage ratio; the broader roadmap lives in
|
||||
`coverage/development-capabilities.json`.
|
||||
|
||||
### Read-only plan guidance
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"version": 1,
|
||||
"skill": "microsoft/skills/development/al-development.md",
|
||||
"maximumReviewRounds": 3,
|
||||
"minimumKnowledgeRecall": 1.0,
|
||||
"minimumKnowledgePrecision": 0.5,
|
||||
"cases": [
|
||||
|
|
@ -183,6 +184,54 @@
|
|||
"tests",
|
||||
"review"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "versioned-data-upgrade",
|
||||
"title": "Implement a rerunnable data upgrade",
|
||||
"capabilities": [
|
||||
"install-and-upgrade"
|
||||
],
|
||||
"expectedKind": "upgrade",
|
||||
"development-request": {
|
||||
"kind": "upgrade",
|
||||
"description": "Upgrade an existing app from a text-based Customer Tier field to a new enum-backed Tier field. Preserve existing customer data, support tenants that skip intermediate app versions, keep fresh installation separate from migration, and add upgrade tests.",
|
||||
"acceptance-criteria": [
|
||||
"Existing tier values are migrated without running field validation triggers.",
|
||||
"The migration is guarded by an upgrade tag and is safe when the upgrade runs again.",
|
||||
"Check and validation triggers do not write data.",
|
||||
"Fresh installation does not run version-upgrade migration.",
|
||||
"Tests cover more than one historical source data version."
|
||||
]
|
||||
},
|
||||
"context": {
|
||||
"technologies": [
|
||||
"al"
|
||||
],
|
||||
"countries": [
|
||||
"w1"
|
||||
],
|
||||
"application-area": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"requiredKnowledge": [
|
||||
"microsoft/knowledge/upgrade/appversion-meaning-depends-on-execution-context.md",
|
||||
"microsoft/knowledge/upgrade/install-and-upgrade-codeunits-have-no-order.md",
|
||||
"microsoft/knowledge/upgrade/use-upgrade-tags-not-version-checks.md",
|
||||
"microsoft/knowledge/upgrade/check-only-triggers-do-not-migrate-data.md",
|
||||
"microsoft/knowledge/upgrade/install-code-does-not-run-on-version-upgrade.md"
|
||||
],
|
||||
"optionalKnowledge": [
|
||||
"microsoft/knowledge/upgrade/datatransfer-skips-triggers-and-subscribers.md",
|
||||
"microsoft/knowledge/upgrade/datatransfer-for-bulk-init.md",
|
||||
"microsoft/knowledge/upgrade/register-upgrade-tags-with-subscribers.md",
|
||||
"microsoft/knowledge/testing/transactionmodel-attribute-governs-test-transactions.md"
|
||||
],
|
||||
"requiredChecks": [
|
||||
"compile",
|
||||
"tests",
|
||||
"review"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,29 +2,37 @@
|
|||
"version": 1,
|
||||
"skill": "microsoft/skills/development/al-development-plan.md",
|
||||
"minimumKnowledgeRecall": 1.0,
|
||||
"minimumKnowledgePrecision": 0.5,
|
||||
"minimumKnowledgePrecision": 0.67,
|
||||
"cases": [
|
||||
{
|
||||
"id": "bcapps-filtered-batch-bug-plan",
|
||||
"title": "Select guidance for a filtered batch bug fix",
|
||||
"title": "Select guidance from a BCFIX-HANDOFF v1 payload",
|
||||
"expectedKind": "bug",
|
||||
"development-plan": {
|
||||
"kind": "bug",
|
||||
"request": "Fix a filtered batch routine that updates only the first matching record.",
|
||||
"root-cause": "The routine calls FindFirst and updates the current record without entering an enumerator loop.",
|
||||
"affected-files": [
|
||||
"src/Batch/UpdateSelectedEntries.Codeunit.al",
|
||||
"format": "BCFIX-HANDOFF",
|
||||
"version": 1,
|
||||
"issue": 4312,
|
||||
"phase": "implement",
|
||||
"status": "paused",
|
||||
"baton": 2,
|
||||
"rootCause": "The routine calls FindFirst and updates the current record without entering an enumerator loop, so only the first record in the supplied filtered set is modified.",
|
||||
"harnessMap": {
|
||||
"testCodeunit": "Update Selected Entries Tests",
|
||||
"libraries": [
|
||||
"Library - Random"
|
||||
],
|
||||
"pages": [],
|
||||
"handlers": []
|
||||
},
|
||||
"iterationsUsed": 1,
|
||||
"filesCommitted": [
|
||||
"test/Batch/UpdateSelectedEntries.Codeunit.al"
|
||||
],
|
||||
"proposed-changes": [
|
||||
"Iterate the supplied filtered record set and update every selected entry.",
|
||||
"Add a regression test with multiple selected entries."
|
||||
"lastTestResult": "1 failing, 4 passing; the red test shows only the first of three selected records is updated.",
|
||||
"deadEnds": [
|
||||
"Changing the page selection did not help because the codeunit discarded the supplied enumerator."
|
||||
],
|
||||
"test-strategy": "Establish a red test where only one of several selected records is updated, then require all selected records to be updated after the fix.",
|
||||
"acceptance-criteria": [
|
||||
"The supplied filters are preserved.",
|
||||
"Every selected record is updated.",
|
||||
"The regression test demonstrates red-to-green behavior."
|
||||
]
|
||||
"nextStep": "Replace the single-record read with an update-safe FindSet/Next loop that preserves the supplied filters, then rerun the red test."
|
||||
},
|
||||
"context": {
|
||||
"technologies": [
|
||||
|
|
@ -45,6 +53,50 @@
|
|||
"optionalKnowledge": [
|
||||
"microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.md"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "versioned-upgrade-plan-guidance",
|
||||
"title": "Select guidance for a versioned data upgrade",
|
||||
"expectedKind": "upgrade",
|
||||
"development-plan": {
|
||||
"kind": "upgrade",
|
||||
"request": "Migrate existing customer tier text values to a new enum field in an app upgrade.",
|
||||
"root-cause": "The new schema needs an explicit, rerunnable migration for existing tenant data.",
|
||||
"affected-files": [
|
||||
"src/Upgrade/CustomerTierUpgrade.Codeunit.al",
|
||||
"test/Upgrade/CustomerTierUpgradeTests.Codeunit.al"
|
||||
],
|
||||
"proposed-changes": [
|
||||
"Add a tagged upgrade step that copies existing values without validation triggers.",
|
||||
"Add upgrade tests from multiple historical data versions."
|
||||
],
|
||||
"test-strategy": "Run upgrade tests from two prior data versions and verify a second invocation makes no further changes.",
|
||||
"acceptance-criteria": [
|
||||
"Existing values are preserved.",
|
||||
"The migration is rerunnable.",
|
||||
"Fresh installation does not execute upgrade migration."
|
||||
]
|
||||
},
|
||||
"context": {
|
||||
"technologies": [
|
||||
"al"
|
||||
],
|
||||
"countries": [
|
||||
"w1"
|
||||
],
|
||||
"application-area": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"requiredKnowledge": [
|
||||
"microsoft/knowledge/upgrade/use-upgrade-tags-not-version-checks.md",
|
||||
"microsoft/knowledge/upgrade/check-only-triggers-do-not-migrate-data.md",
|
||||
"microsoft/knowledge/upgrade/install-code-does-not-run-on-version-upgrade.md"
|
||||
],
|
||||
"optionalKnowledge": [
|
||||
"microsoft/knowledge/upgrade/datatransfer-skips-triggers-and-subscribers.md",
|
||||
"microsoft/knowledge/upgrade/appversion-meaning-depends-on-execution-context.md"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue