mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-10-05 22:56:55 +01:00
208 lines
10 KiB
JSON
208 lines
10 KiB
JSON
{
|
|
"version": 1,
|
|
"skill": "microsoft/skills/development/al-implementation-guidance.md",
|
|
"minimumKnowledgeRecall": 1.0,
|
|
"minimumKnowledgePrecision": 0.67,
|
|
"cases": [
|
|
{
|
|
"id": "expanded-surface-adds-pii-field",
|
|
"title": "Current implementation expands beyond the plan into a privacy-sensitive schema surface",
|
|
"evidenceType": "production-shaped-synthetic",
|
|
"expectedOutcome": "completed",
|
|
"development-plan": {
|
|
"request": "Add an opt-in notification channel selected by an internal setup routine.",
|
|
"affected-files": ["src/Notifications/NotificationSetup.Codeunit.al"],
|
|
"test-strategy": "Verify the selected channel is persisted and used.",
|
|
"acceptance-criteria": ["A tenant can select and use the notification channel."]
|
|
},
|
|
"implementation-diff": "diff --git a/src/Notifications/NotificationSetup.TableExt.al b/src/Notifications/NotificationSetup.TableExt.al\nnew file mode 100644\n--- /dev/null\n+++ b/src/Notifications/NotificationSetup.TableExt.al\n@@\n+tableextension 71000 \"Notification Setup Ext.\" extends \"Notification Setup\"\n+{\n+ fields\n+ {\n+ field(71000; \"Recipient E-Mail\"; Text[250])\n+ {\n+ DataClassification = ToBeClassified;\n+ }\n+ }\n+}",
|
|
"decision-context": {
|
|
"phase": "implement-schema",
|
|
"decision": "Finalize the newly introduced recipient field before adding persistence tests.",
|
|
"decision-key": "notification-recipient-schema",
|
|
"evidence-fingerprint": "sha256:expanded-surface-v1",
|
|
"affected-files": ["src/Notifications/NotificationSetup.TableExt.al"],
|
|
"affected-symbols": ["tableextension 71000 Notification Setup Ext.", "field 71000 Recipient E-Mail"],
|
|
"changed-tokens": ["tableextension", "field", "DataClassification", "ToBeClassified"],
|
|
"tests": ["Persist and retrieve a recipient email in the setup extension."],
|
|
"acceptance-criteria": ["The new recipient field is suitable for release."],
|
|
"development-plan-pin": "plan:notification-channel:v1",
|
|
"implementation-evidence-pin": "diff:expanded-surface-v1"
|
|
},
|
|
"consumed-guidance": [
|
|
{
|
|
"path": "microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md",
|
|
"decision-key": "notification-recipient-schema",
|
|
"evidence-fingerprint": "sha256:plan-only-v0",
|
|
"prior-decision": "No recipient field existed in the implementation surface."
|
|
}
|
|
],
|
|
"context": {
|
|
"bc-version": "28",
|
|
"technologies": ["al"],
|
|
"countries": ["w1"],
|
|
"application-area": ["all"],
|
|
"unknown": []
|
|
},
|
|
"requiredKnowledge": [
|
|
"microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md"
|
|
],
|
|
"optionalKnowledge": [
|
|
"microsoft/knowledge/privacy/resolve-tobeclassified-before-release.md"
|
|
],
|
|
"expectedOmitted": [],
|
|
"requiresUnresolved": false
|
|
},
|
|
{
|
|
"id": "exact-consumed-guidance-is-omitted",
|
|
"title": "Exact previously consumed guidance is not reissued",
|
|
"evidenceType": "production-shaped-synthetic",
|
|
"expectedOutcome": "no-knowledge",
|
|
"development-plan": {
|
|
"request": "Add a recipient email field to notification setup.",
|
|
"affected-files": ["src/Notifications/NotificationSetup.TableExt.al"],
|
|
"test-strategy": "Persist and retrieve the recipient.",
|
|
"acceptance-criteria": ["The recipient is stored with the intended schema."]
|
|
},
|
|
"implementation-diff": "diff --git a/src/Notifications/NotificationSetup.TableExt.al b/src/Notifications/NotificationSetup.TableExt.al\n@@\n+ field(71000; \"Recipient E-Mail\"; Text[250])\n+ {\n+ DataClassification = ToBeClassified;\n+ }",
|
|
"decision-context": {
|
|
"phase": "implement-schema",
|
|
"decision": "Finalize the recipient field classification.",
|
|
"decision-key": "notification-recipient-schema",
|
|
"evidence-fingerprint": "sha256:recipient-schema-v1",
|
|
"affected-files": ["src/Notifications/NotificationSetup.TableExt.al"],
|
|
"affected-symbols": ["field 71000 Recipient E-Mail"],
|
|
"changed-tokens": ["DataClassification", "ToBeClassified"],
|
|
"tests": ["Persist and retrieve a recipient email."],
|
|
"acceptance-criteria": ["The field classification is finalized."],
|
|
"development-plan-pin": "plan:notification-recipient:v1",
|
|
"implementation-evidence-pin": "diff:recipient-schema-v1"
|
|
},
|
|
"consumed-guidance": [
|
|
{
|
|
"path": "microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md",
|
|
"decision-key": "notification-recipient-schema",
|
|
"evidence-fingerprint": "sha256:recipient-schema-v1",
|
|
"prior-decision": "Classify the recipient field according to the data it stores."
|
|
}
|
|
],
|
|
"context": {
|
|
"bc-version": "28",
|
|
"technologies": ["al"],
|
|
"countries": ["w1"],
|
|
"application-area": ["all"],
|
|
"unknown": []
|
|
},
|
|
"requiredKnowledge": [],
|
|
"optionalKnowledge": [],
|
|
"expectedOmitted": [
|
|
"microsoft/knowledge/privacy/data-classification-required-on-pii-fields.md"
|
|
],
|
|
"requiresUnresolved": false
|
|
},
|
|
{
|
|
"id": "no-additional-guidance-control",
|
|
"title": "Comment-only implementation checkpoint has no additional guidance",
|
|
"evidenceType": "production-shaped-synthetic",
|
|
"expectedOutcome": "no-knowledge",
|
|
"development-plan": {
|
|
"request": "Correct a spelling error in an internal implementation comment without changing behavior.",
|
|
"affected-files": ["src/Notifications/NotificationDispatcher.Codeunit.al"],
|
|
"test-strategy": "Inspect the diff for comment-only changes.",
|
|
"acceptance-criteria": ["Executable AL is unchanged."]
|
|
},
|
|
"implementation-diff": "diff --git a/src/Notifications/NotificationDispatcher.Codeunit.al b/src/Notifications/NotificationDispatcher.Codeunit.al\n@@\n- // Retreive the configured channel.\n+ // Retrieve the configured channel.",
|
|
"decision-context": {
|
|
"phase": "verify-diff",
|
|
"decision": "Confirm that the change remains comment-only.",
|
|
"decision-key": "notification-comment-spelling",
|
|
"evidence-fingerprint": "sha256:comment-only-v1",
|
|
"affected-files": ["src/Notifications/NotificationDispatcher.Codeunit.al"],
|
|
"affected-symbols": ["procedure DispatchNotification"],
|
|
"changed-tokens": ["comment"],
|
|
"tests": ["Inspect the patch for executable changes."],
|
|
"acceptance-criteria": ["Only comment text changes."],
|
|
"development-plan-pin": "plan:comment-spelling:v1",
|
|
"implementation-evidence-pin": "diff:comment-only-v1"
|
|
},
|
|
"consumed-guidance": [],
|
|
"context": {
|
|
"bc-version": "28",
|
|
"technologies": ["al"],
|
|
"countries": ["w1"],
|
|
"application-area": ["all"],
|
|
"unknown": []
|
|
},
|
|
"requiredKnowledge": [],
|
|
"optionalKnowledge": [],
|
|
"expectedOmitted": [],
|
|
"requiresUnresolved": false
|
|
},
|
|
{
|
|
"id": "missing-current-decision-and-diff",
|
|
"title": "Plan-only input is not an implementation consultation",
|
|
"evidenceType": "production-shaped-synthetic",
|
|
"expectedOutcome": "not-applicable",
|
|
"development-plan": {
|
|
"request": "Add notification delivery.",
|
|
"affected-files": ["src/Notifications/NotificationDispatcher.Codeunit.al"],
|
|
"test-strategy": "Verify delivery.",
|
|
"acceptance-criteria": ["Notifications are delivered."]
|
|
},
|
|
"implementation-diff": "",
|
|
"decision-context": {},
|
|
"consumed-guidance": [],
|
|
"context": {
|
|
"bc-version": "28",
|
|
"technologies": ["al"],
|
|
"countries": ["w1"],
|
|
"application-area": ["all"],
|
|
"unknown": []
|
|
},
|
|
"requiredKnowledge": [],
|
|
"optionalKnowledge": [],
|
|
"expectedOmitted": [],
|
|
"requiresUnresolved": false
|
|
},
|
|
{
|
|
"id": "read-only-public-interface-checkpoint",
|
|
"title": "Public interface checkpoint returns constraints without repository mutation",
|
|
"evidenceType": "production-shaped-synthetic",
|
|
"expectedOutcome": "completed",
|
|
"development-plan": {
|
|
"request": "Expose delivery status through the existing notification provider contract.",
|
|
"affected-files": ["src/Notifications/INotificationProvider.Interface.al"],
|
|
"test-strategy": "Compile existing and new provider implementations.",
|
|
"acceptance-criteria": ["Existing dependent provider implementations remain compatible."]
|
|
},
|
|
"implementation-diff": "diff --git a/src/Notifications/INotificationProvider.Interface.al b/src/Notifications/INotificationProvider.Interface.al\n@@\n interface \"Notification Provider\"\n {\n procedure Send(NotificationId: Guid);\n+ procedure GetDeliveryStatus(NotificationId: Guid): Enum \"Delivery Status\";\n }",
|
|
"decision-context": {
|
|
"phase": "public-contract-checkpoint",
|
|
"decision": "Choose a compatible shape for the new delivery-status capability.",
|
|
"decision-key": "notification-provider-status-contract",
|
|
"evidence-fingerprint": "sha256:provider-interface-v2",
|
|
"affected-files": ["src/Notifications/INotificationProvider.Interface.al"],
|
|
"affected-symbols": ["interface Notification Provider", "procedure GetDeliveryStatus"],
|
|
"changed-tokens": ["interface", "procedure", "Enum"],
|
|
"tests": ["Compile unchanged dependent provider implementations.", "Compile a provider opting into delivery status."],
|
|
"acceptance-criteria": ["Existing implementations remain compatible."],
|
|
"development-plan-pin": "plan:delivery-status:v1",
|
|
"implementation-evidence-pin": "diff:provider-interface-v2"
|
|
},
|
|
"consumed-guidance": [],
|
|
"context": {
|
|
"bc-version": "28",
|
|
"technologies": ["al"],
|
|
"countries": ["w1"],
|
|
"application-area": ["all"],
|
|
"unknown": []
|
|
},
|
|
"requiredKnowledge": [
|
|
"microsoft/knowledge/interfaces/extend-published-interfaces-dont-edit-them.md"
|
|
],
|
|
"optionalKnowledge": [],
|
|
"expectedOmitted": [],
|
|
"requiresUnresolved": false
|
|
}
|
|
]
|
|
}
|