mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 09:26:52 +01:00
Emit human-readable domain label on review findings
Add an optional findings[].domain field to the DO review output contract so each finding carries its own human-readable review-domain display label. Leaf review skills set it on every finding they emit; the al-code-review super-skill copies it verbatim during rollup and sets it to "Agent" for its own cross-cutting agent findings. This decouples consumers from BCQuality's domain taxonomy: they render finding.domain verbatim instead of maintaining a sub-skill-id -> label map. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
8904ce583b
commit
2d54a116a9
13 changed files with 70 additions and 39 deletions
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Breaking Changes"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/breaking-changes/do-not-change-published-procedure-signatures.md" }
|
{ "path": "microsoft/knowledge/breaking-changes/do-not-change-published-procedure-signatures.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Breaking Changes"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/breaking-changes/choose-access-modifiers-deliberately.md",
|
"id": "microsoft/knowledge/breaking-changes/choose-access-modifiers-deliberately.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/breaking-changes/choose-access-modifiers-deliberately.md" }
|
{ "path": "microsoft/knowledge/breaking-changes/choose-access-modifiers-deliberately.md" }
|
||||||
],
|
],
|
||||||
"confidence": "medium"
|
"confidence": "medium",
|
||||||
|
"domain": "Breaking Changes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ For each sub-skill in the worklist, executed one at a time per the discipline ab
|
||||||
1. Invoke the sub-skill with the orchestrator's inputs, passing only the subset each sub-skill declares in its `inputs`.
|
1. Invoke the sub-skill with the orchestrator's inputs, passing only the subset each sub-skill declares in its `inputs`.
|
||||||
2. Capture the sub-skill's complete findings-report verbatim and append it to `sub-results`.
|
2. Capture the sub-skill's complete findings-report verbatim and append it to `sub-results`.
|
||||||
3. If the sub-skill's `outcome` is `failed`, stop here for this sub-skill: its findings are not reliable per the DO contract and MUST NOT be copied into the super-skill's top-level `findings[]` or counted in `summary.counts`.
|
3. If the sub-skill's `outcome` is `failed`, stop here for this sub-skill: its findings are not reliable per the DO contract and MUST NOT be copied into the super-skill's top-level `findings[]` or counted in `summary.counts`.
|
||||||
4. Otherwise, append each entry from the sub-skill's `findings[]` to the super-skill's top-level `findings[]`, setting `from-sub-skill` to the sub-skill's `skill.id`. For non-citation findings (those whose `id` is a skill-defined slug rather than a reference path), prefix `id` with `<from-sub-skill>:` to prevent collisions across sub-skills. Other finding fields are preserved.
|
4. Otherwise, append each entry from the sub-skill's `findings[]` to the super-skill's top-level `findings[]`, setting `from-sub-skill` to the sub-skill's `skill.id` and copying each finding's `domain` field verbatim (preserve it unchanged). For non-citation findings (those whose `id` is a skill-defined slug rather than a reference path), prefix `id` with `<from-sub-skill>:` to prevent collisions across sub-skills. Other finding fields are preserved.
|
||||||
|
|
||||||
### Agent self-review pass
|
### Agent self-review pass
|
||||||
|
|
||||||
|
|
@ -90,6 +90,7 @@ For every candidate the agent identifies in this pass:
|
||||||
- Otherwise the candidate has no BCQuality coverage; emit it as a super-skill agent finding.
|
- Otherwise the candidate has no BCQuality coverage; emit it as a super-skill agent finding.
|
||||||
2. **Emit agent finding.** Per DO's *Agent findings* rules:
|
2. **Emit agent finding.** Per DO's *Agent findings* rules:
|
||||||
- `from-sub-skill: "agent"` (the super-skill itself produced it)
|
- `from-sub-skill: "agent"` (the super-skill itself produced it)
|
||||||
|
- `domain: "Agent"` (the display label for super-skill cross-cutting findings)
|
||||||
- `references: []`
|
- `references: []`
|
||||||
- `id` is a skill-defined slug prefixed with `agent:` (for example, `agent:missing-error-handling-on-http-call`).
|
- `id` is a skill-defined slug prefixed with `agent:` (for example, `agent:missing-error-handling-on-http-call`).
|
||||||
- `confidence` capped at `medium`.
|
- `confidence` capped at `medium`.
|
||||||
|
|
@ -139,7 +140,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high",
|
"confidence": "high",
|
||||||
"from-sub-skill": "al-performance-review"
|
"from-sub-skill": "al-performance-review",
|
||||||
|
"domain": "Performance"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
||||||
|
|
@ -153,7 +155,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high",
|
"confidence": "high",
|
||||||
"from-sub-skill": "al-performance-review"
|
"from-sub-skill": "al-performance-review",
|
||||||
|
"domain": "Performance"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/security/use-secrettext-for-credentials.md",
|
"id": "microsoft/knowledge/security/use-secrettext-for-credentials.md",
|
||||||
|
|
@ -168,7 +171,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high",
|
"confidence": "high",
|
||||||
"from-sub-skill": "al-security-review"
|
"from-sub-skill": "al-security-review",
|
||||||
|
"domain": "Security"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
||||||
|
|
@ -182,7 +186,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
||||||
],
|
],
|
||||||
"confidence": "medium",
|
"confidence": "medium",
|
||||||
"from-sub-skill": "al-security-review"
|
"from-sub-skill": "al-security-review",
|
||||||
|
"domain": "Security"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "agent:missing-error-handling-on-http-client",
|
"id": "agent:missing-error-handling-on-http-client",
|
||||||
|
|
@ -195,7 +200,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
},
|
},
|
||||||
"references": [],
|
"references": [],
|
||||||
"confidence": "medium",
|
"confidence": "medium",
|
||||||
"from-sub-skill": "agent"
|
"from-sub-skill": "agent",
|
||||||
|
"domain": "Agent"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": [],
|
"suppressed": [],
|
||||||
|
|
@ -220,7 +226,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Performance"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
||||||
|
|
@ -233,7 +240,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Performance"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
@ -258,7 +266,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Security"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
||||||
|
|
@ -271,7 +280,8 @@ Output conforms to the DO output contract, extended with `sub-results` and `skip
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
||||||
],
|
],
|
||||||
"confidence": "medium"
|
"confidence": "medium",
|
||||||
|
"domain": "Security"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Error Handling"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/error-handling/prefer-errorinfo-for-actionable-errors.md" }
|
{ "path": "microsoft/knowledge/error-handling/prefer-errorinfo-for-actionable-errors.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Error Handling"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/error-handling/errortype-internal-vs-client-for-diagnostics.md",
|
"id": "microsoft/knowledge/error-handling/errortype-internal-vs-client-for-diagnostics.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/error-handling/errortype-internal-vs-client-for-diagnostics.md" }
|
{ "path": "microsoft/knowledge/error-handling/errortype-internal-vs-client-for-diagnostics.md" }
|
||||||
],
|
],
|
||||||
"confidence": "medium"
|
"confidence": "medium",
|
||||||
|
"domain": "Error Handling"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Events"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -117,7 +117,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/events/publish-thin-onbefore-onafter-integration-events.md" }
|
{ "path": "microsoft/knowledge/events/publish-thin-onbefore-onafter-integration-events.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Events"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/events/use-ishandled-to-make-base-behaviour-overridable.md",
|
"id": "microsoft/knowledge/events/use-ishandled-to-make-base-behaviour-overridable.md",
|
||||||
|
|
@ -130,7 +131,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/events/use-ishandled-to-make-base-behaviour-overridable.md" }
|
{ "path": "microsoft/knowledge/events/use-ishandled-to-make-base-behaviour-overridable.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Events"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Interfaces"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/interfaces/prefer-interface-over-case-branching.md" }
|
{ "path": "microsoft/knowledge/interfaces/prefer-interface-over-case-branching.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Interfaces"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/interfaces/set-defaultimplementation-on-enum.md",
|
"id": "microsoft/knowledge/interfaces/set-defaultimplementation-on-enum.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/interfaces/set-defaultimplementation-on-enum.md" }
|
{ "path": "microsoft/knowledge/interfaces/set-defaultimplementation-on-enum.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Interfaces"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Performance"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
{ "path": "microsoft/knowledge/performance/filter-before-find.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Performance"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
"id": "community/knowledge/performance/call-setloadfields-before-filters.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
{ "path": "community/knowledge/performance/call-setloadfields-before-filters.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Performance"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Privacy"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/privacy/strsubstno-prebuild-breaks-error-telemetry-classification.md" }
|
{ "path": "microsoft/knowledge/privacy/strsubstno-prebuild-breaks-error-telemetry-classification.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Privacy"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Security"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
{ "path": "microsoft/knowledge/security/use-secrettext-for-credentials.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Security"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
"id": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
{ "path": "microsoft/knowledge/security/never-hardcode-secrets-in-al.md" }
|
||||||
],
|
],
|
||||||
"confidence": "medium"
|
"confidence": "medium",
|
||||||
|
"domain": "Security"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Style"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +97,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/style/apply-approved-label-suffixes.md" }
|
{ "path": "microsoft/knowledge/style/apply-approved-label-suffixes.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Style"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Accessibility"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -97,7 +97,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/ui/field-tooltips-start-with-specifies-and-end-with-period.md" }
|
{ "path": "microsoft/knowledge/ui/field-tooltips-start-with-specifies-and-end-with-period.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Accessibility"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Upgrade"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -99,7 +99,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/upgrade/enum-changes-must-be-additive-at-the-end.md" }
|
{ "path": "microsoft/knowledge/upgrade/enum-changes-must-be-additive-at-the-end.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Upgrade"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ Outcome selection:
|
||||||
|
|
||||||
## Output
|
## Output
|
||||||
|
|
||||||
Output conforms to the DO output contract. A populated example:
|
Output conforms to the DO output contract. Every finding this skill emits MUST set `findings[].domain` to `"Web Services"`. A populated example:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
|
@ -100,7 +100,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/web-services/set-required-api-page-properties.md" }
|
{ "path": "microsoft/knowledge/web-services/set-required-api-page-properties.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Web Services"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "microsoft/knowledge/web-services/expose-systemid-as-the-api-key.md",
|
"id": "microsoft/knowledge/web-services/expose-systemid-as-the-api-key.md",
|
||||||
|
|
@ -113,7 +114,8 @@ Output conforms to the DO output contract. A populated example:
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "microsoft/knowledge/web-services/expose-systemid-as-the-api-key.md" }
|
{ "path": "microsoft/knowledge/web-services/expose-systemid-as-the-api-key.md" }
|
||||||
],
|
],
|
||||||
"confidence": "high"
|
"confidence": "high",
|
||||||
|
"domain": "Web Services"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"suppressed": []
|
"suppressed": []
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ Every action skill emits a single JSON document that conforms to this schema:
|
||||||
],
|
],
|
||||||
"confidence": "high | medium | low",
|
"confidence": "high | medium | low",
|
||||||
"from-sub-skill": "string",
|
"from-sub-skill": "string",
|
||||||
|
"domain": "string",
|
||||||
"suggested-code": "string",
|
"suggested-code": "string",
|
||||||
"suggested-code-omission-reason": "string"
|
"suggested-code-omission-reason": "string"
|
||||||
}
|
}
|
||||||
|
|
@ -189,6 +190,8 @@ The first reference is the **primary** reference: the knowledge file the finding
|
||||||
|
|
||||||
**`findings[].from-sub-skill`** — optional. Set only by super-skills. The `skill.id` of the sub-skill that produced the finding, or the literal string `"agent"` for an agent finding the super-skill produced from its own cross-cutting reasoning. Absent on findings emitted directly by a leaf skill — including agent findings the leaf emits within its own domain, which appear in the leaf's own report without this field.
|
**`findings[].from-sub-skill`** — optional. Set only by super-skills. The `skill.id` of the sub-skill that produced the finding, or the literal string `"agent"` for an agent finding the super-skill produced from its own cross-cutting reasoning. Absent on findings emitted directly by a leaf skill — including agent findings the leaf emits within its own domain, which appear in the leaf's own report without this field.
|
||||||
|
|
||||||
|
**`findings[].domain`** — optional. A short, human-readable display label for the review domain that produced the finding (for example, `Security`, `Performance`, `Accessibility`). Set by the leaf skill on every finding it emits. The super-skill preserves it verbatim when rolling a sub-skill's finding into its top-level `findings[]`, and sets it to `"Agent"` for the agent findings it emits about cross-cutting concerns. Consumers SHOULD render it verbatim and MUST tolerate its absence (older producers may not emit it).
|
||||||
|
|
||||||
**`findings[].suggested-code`** — optional in the schema but **expected for mechanical findings**. It is a concrete code-replacement payload for the lines indicated by `location`. When present, the string MUST be a literal replacement for the source lines covered by `location.line` (or `location.range` if set) — i.e., what the file would contain after the fix, with no surrounding diff markers, fences, or commentary. Consumers MAY render it as a one-click suggestion in the delivery surface (for example, a GitHub ```` ```suggestion ```` block).
|
**`findings[].suggested-code`** — optional in the schema but **expected for mechanical findings**. It is a concrete code-replacement payload for the lines indicated by `location`. When present, the string MUST be a literal replacement for the source lines covered by `location.line` (or `location.range` if set) — i.e., what the file would contain after the fix, with no surrounding diff markers, fences, or commentary. Consumers MAY render it as a one-click suggestion in the delivery surface (for example, a GitHub ```` ```suggestion ```` block).
|
||||||
|
|
||||||
Emit `suggested-code` whenever the fix is small, local, and mechanical: deleting unreachable code; replacing one expression (`Count() > 0` → `not IsEmpty()`); moving a local `Label` to object scope; adding a missing property such as `ToolTip`, `OptionCaption`, or `DataClassification`; replacing a string-concatenated `Error` with a Label-backed call; changing a permission token; or adding a missing `else`/guard branch whose replacement is unambiguous from the surrounding diff. When a `.good.al` companion exists and the diff context matches the `.bad.al` shape, prefer adapting the `.good.al` replacement into `suggested-code`.
|
Emit `suggested-code` whenever the fix is small, local, and mechanical: deleting unreachable code; replacing one expression (`Count() > 0` → `not IsEmpty()`); moving a local `Label` to object scope; adding a missing property such as `ToolTip`, `OptionCaption`, or `DataClassification`; replacing a string-concatenated `Error` with a Label-backed call; changing a permission token; or adding a missing `else`/guard branch whose replacement is unambiguous from the surrounding diff. When a `.good.al` companion exists and the diff context matches the `.bad.al` shape, prefer adapting the `.good.al` replacement into `suggested-code`.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue