diff --git a/README.md b/README.md index 7933725e..43032d42 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ BCQuality contains **knowledge** and **skills**. It does not contain agents. Age ### Knowledge files -Atomic markdown files with YAML frontmatter. Each file covers one concern — one thing an agent would cite when reviewing or generating code. Knowledge files live in two layers: +Atomic markdown files with YAML frontmatter. Each file covers one concern — one thing an agent would cite when reviewing or generating code. Knowledge files live in three layers: - **`/microsoft/`** — Microsoft-endorsed layer. - `/microsoft/knowledge/` — Platform guardrails, official guidance. @@ -39,7 +39,9 @@ Atomic markdown files with YAML frontmatter. Each file covers one concern — on - `/custom/knowledge/` — Organization-specific knowledge files. - `/custom/skills/` — Organization-specific action skills. -All three layers are enabled by default when an agent consumes BCQuality. Content can be promoted from Community to Microsoft-endorsed once it proves itself — this is a first-class concept, not an afterthought. +All three layers are enabled by default when an agent consumes BCQuality. In the shared upstream layers, an action skill and the canonical knowledge it owns should live together: knowledge used by a Microsoft-endorsed skill belongs in `/microsoft/`, while `/community/` holds community-owned skills and their related knowledge. A split is acceptable briefly while a skill or corpus is being promoted, but it should not be the steady state. The `/custom/` layer remains the intentional exception because it overrides shared content in consumer forks. + +Layer authority follows review and ownership, not the contributor's affiliation. Community contributions to a Microsoft-owned knowledge domain can therefore be accepted directly into `/microsoft/`; content can also be promoted from Community to Microsoft-endorsed once its owning skill is promoted. ### Skills @@ -194,7 +196,7 @@ Contributions are welcome. Before submitting a PR: 1. Read the knowledge file format above — frontmatter and sections are validated by CI. 2. Keep files atomic: one concern per file, under 100 lines. -3. Target your contribution to the right layer — most community contributions go in `/community/knowledge/`. +3. Target your contribution to the layer that owns the action skill: use `/microsoft/knowledge/` for Microsoft-owned domains and `/community/knowledge/` for knowledge that accompanies a community-owned skill. 4. Adding a BC fact — or stopping the agent from flagging a false positive — is a knowledge file, not a skill edit. If a PR changes *what* a review skill flags, the change almost certainly belongs in a knowledge file. See [`skills/write.md`](skills/write.md). CI runs validation on every PR. If your knowledge file has schema violations, missing sections, code blocks, or exceeds 100 lines, the check will fail with a clear error message. diff --git a/agent-consumption.md b/agent-consumption.md index 61eb3c9e..37a7a100 100644 --- a/agent-consumption.md +++ b/agent-consumption.md @@ -58,7 +58,7 @@ Each action skill is a markdown file that specifies what to do at each step. The | **Worklist** | Narrow from N candidates to the M that apply to this specific task. | | **Action** | Apply the relevant knowledge and produce structured output. | -Example: a performance review skill sources from `/microsoft/knowledge/performance/` and `/community/knowledge/performance/`, filters to `bc-version: 26` and `technologies: [al]`, narrows the 25 candidate files to the 8 that apply to the 15 objects changed in the PR, and then evaluates each file against the diff. +Example: the Microsoft-owned performance review skill selects `performance` entries across every enabled layer, filters to `bc-version: 26` and `technologies: [al]`, narrows the candidate files to those that apply to the changed objects, and then evaluates each file against the diff. Its canonical corpus lives beside it under `/microsoft/knowledge/performance/`; cross-layer entries are limited to custom overrides or short-lived promotion work. At this point the agent reads READ and DO on demand — it needs READ to interpret each knowledge file's frontmatter and sections, and DO to shape its output. Those contracts are fetched when first needed, not as part of bootstrap. @@ -104,7 +104,7 @@ Orchestrators MUST tolerate an absent `domain` in reports from older producers. into Entry's task context. Entry and the dispatched action skills remain authoritative. - **Layers decide authority, not code.** The agent sees `/microsoft/` and `/community/` together; if two files conflict, the precedence rule defined in READ resolves it. A partner fork can disable `/community/` — that's a config choice, not a code change. -- **Knowledge and skills evolve independently.** A new knowledge file requires no skill changes — existing skills pick it up via frontmatter filters. A new skill requires no knowledge changes — it sources from what's already there. +- **Knowledge and skills evolve independently within their owning layer.** A new knowledge file requires no skill changes because existing skills pick it up via frontmatter filters. Layer placement still follows skill ownership, so promoting a skill also promotes its canonical corpus. ## The mental model, in one sentence diff --git a/community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.bad.al b/microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.bad.al similarity index 100% rename from community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.bad.al rename to microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.bad.al diff --git a/community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.good.al b/microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.good.al similarity index 100% rename from community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.good.al rename to microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.good.al diff --git a/community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.md b/microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.md similarity index 100% rename from community/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.md rename to microsoft/knowledge/data-modeling/owning-table-must-delete-dependents-in-ondelete.md diff --git a/community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.bad.al b/microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.bad.al similarity index 100% rename from community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.bad.al rename to microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.bad.al diff --git a/community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.good.al b/microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.good.al similarity index 100% rename from community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.good.al rename to microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.good.al diff --git a/community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.md b/microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.md similarity index 100% rename from community/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.md rename to microsoft/knowledge/data-modeling/transferfields-skip-type-mismatch-can-drop-data.md diff --git a/community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.bad.al b/microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.bad.al similarity index 100% rename from community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.bad.al rename to microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.bad.al diff --git a/community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.good.al b/microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.good.al similarity index 100% rename from community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.good.al rename to microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.good.al diff --git a/community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.md b/microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.md similarity index 100% rename from community/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.md rename to microsoft/knowledge/data-modeling/validate-table-relation-false-suppresses-rename-propagation.md diff --git a/community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.bad.al b/microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.bad.al similarity index 100% rename from community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.bad.al rename to microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.bad.al diff --git a/community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.good.al b/microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.good.al similarity index 100% rename from community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.good.al rename to microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.good.al diff --git a/community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.md b/microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.md similarity index 100% rename from community/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.md rename to microsoft/knowledge/data-modeling/xrec-is-a-before-image-only-in-some-triggers.md diff --git a/community/knowledge/events/declare-event-publishers-local-or-internal.bad.al b/microsoft/knowledge/events/declare-event-publishers-local-or-internal.bad.al similarity index 100% rename from community/knowledge/events/declare-event-publishers-local-or-internal.bad.al rename to microsoft/knowledge/events/declare-event-publishers-local-or-internal.bad.al diff --git a/community/knowledge/events/declare-event-publishers-local-or-internal.good.al b/microsoft/knowledge/events/declare-event-publishers-local-or-internal.good.al similarity index 100% rename from community/knowledge/events/declare-event-publishers-local-or-internal.good.al rename to microsoft/knowledge/events/declare-event-publishers-local-or-internal.good.al diff --git a/community/knowledge/events/declare-event-publishers-local-or-internal.md b/microsoft/knowledge/events/declare-event-publishers-local-or-internal.md similarity index 100% rename from community/knowledge/events/declare-event-publishers-local-or-internal.md rename to microsoft/knowledge/events/declare-event-publishers-local-or-internal.md diff --git a/community/knowledge/events/expose-process-context-via-manually-bound-flag.bad.al b/microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.bad.al similarity index 100% rename from community/knowledge/events/expose-process-context-via-manually-bound-flag.bad.al rename to microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.bad.al diff --git a/community/knowledge/events/expose-process-context-via-manually-bound-flag.good.al b/microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.good.al similarity index 100% rename from community/knowledge/events/expose-process-context-via-manually-bound-flag.good.al rename to microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.good.al diff --git a/community/knowledge/events/expose-process-context-via-manually-bound-flag.md b/microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.md similarity index 100% rename from community/knowledge/events/expose-process-context-via-manually-bound-flag.md rename to microsoft/knowledge/events/expose-process-context-via-manually-bound-flag.md diff --git a/community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.bad.al b/microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.bad.al similarity index 100% rename from community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.bad.al rename to microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.bad.al diff --git a/community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.good.al b/microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.good.al similarity index 100% rename from community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.good.al rename to microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.good.al diff --git a/community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.md b/microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.md similarity index 100% rename from community/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.md rename to microsoft/knowledge/performance/avoid-currpage-update-in-onaftergetrecord.md diff --git a/community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.bad.al b/microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.bad.al similarity index 100% rename from community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.bad.al rename to microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.bad.al diff --git a/community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.good.al b/microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.good.al similarity index 100% rename from community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.good.al rename to microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.good.al diff --git a/community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.md b/microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.md similarity index 100% rename from community/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.md rename to microsoft/knowledge/performance/batch-number-series-instead-of-getnextno-per-row.md diff --git a/community/knowledge/performance/boolean-operators-do-not-short-circuit.bad.al b/microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.bad.al similarity index 100% rename from community/knowledge/performance/boolean-operators-do-not-short-circuit.bad.al rename to microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.bad.al diff --git a/community/knowledge/performance/boolean-operators-do-not-short-circuit.good.al b/microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.good.al similarity index 100% rename from community/knowledge/performance/boolean-operators-do-not-short-circuit.good.al rename to microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.good.al diff --git a/community/knowledge/performance/boolean-operators-do-not-short-circuit.md b/microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.md similarity index 100% rename from community/knowledge/performance/boolean-operators-do-not-short-circuit.md rename to microsoft/knowledge/performance/boolean-operators-do-not-short-circuit.md diff --git a/community/knowledge/performance/case-true-of-for-long-condition-chains.bad.al b/microsoft/knowledge/performance/case-true-of-for-long-condition-chains.bad.al similarity index 100% rename from community/knowledge/performance/case-true-of-for-long-condition-chains.bad.al rename to microsoft/knowledge/performance/case-true-of-for-long-condition-chains.bad.al diff --git a/community/knowledge/performance/case-true-of-for-long-condition-chains.good.al b/microsoft/knowledge/performance/case-true-of-for-long-condition-chains.good.al similarity index 100% rename from community/knowledge/performance/case-true-of-for-long-condition-chains.good.al rename to microsoft/knowledge/performance/case-true-of-for-long-condition-chains.good.al diff --git a/community/knowledge/performance/case-true-of-for-long-condition-chains.md b/microsoft/knowledge/performance/case-true-of-for-long-condition-chains.md similarity index 100% rename from community/knowledge/performance/case-true-of-for-long-condition-chains.md rename to microsoft/knowledge/performance/case-true-of-for-long-condition-chains.md diff --git a/community/knowledge/performance/changecompany-in-loop-drops-caches.bad.al b/microsoft/knowledge/performance/changecompany-in-loop-drops-caches.bad.al similarity index 100% rename from community/knowledge/performance/changecompany-in-loop-drops-caches.bad.al rename to microsoft/knowledge/performance/changecompany-in-loop-drops-caches.bad.al diff --git a/community/knowledge/performance/changecompany-in-loop-drops-caches.good.al b/microsoft/knowledge/performance/changecompany-in-loop-drops-caches.good.al similarity index 100% rename from community/knowledge/performance/changecompany-in-loop-drops-caches.good.al rename to microsoft/knowledge/performance/changecompany-in-loop-drops-caches.good.al diff --git a/community/knowledge/performance/changecompany-in-loop-drops-caches.md b/microsoft/knowledge/performance/changecompany-in-loop-drops-caches.md similarity index 100% rename from community/knowledge/performance/changecompany-in-loop-drops-caches.md rename to microsoft/knowledge/performance/changecompany-in-loop-drops-caches.md diff --git a/community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.bad.al b/microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.bad.al similarity index 100% rename from community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.bad.al rename to microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.bad.al diff --git a/community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.good.al b/microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.good.al similarity index 100% rename from community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.good.al rename to microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.good.al diff --git a/community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.md b/microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.md similarity index 100% rename from community/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.md rename to microsoft/knowledge/performance/dataaccessintent-readonly-on-analytical-objects.md diff --git a/community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.bad.al b/microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.bad.al similarity index 100% rename from community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.bad.al rename to microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.bad.al diff --git a/community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.good.al b/microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.good.al similarity index 100% rename from community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.good.al rename to microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.good.al diff --git a/community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.md b/microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.md similarity index 100% rename from community/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.md rename to microsoft/knowledge/performance/guiallowed-guard-on-pages-used-as-odata.md diff --git a/community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.bad.al b/microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.bad.al similarity index 100% rename from community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.bad.al rename to microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.bad.al diff --git a/community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.good.al b/microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.good.al similarity index 100% rename from community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.good.al rename to microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.good.al diff --git a/community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.md b/microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.md similarity index 100% rename from community/knowledge/performance/httpclient-inside-write-transaction-holds-locks.md rename to microsoft/knowledge/performance/httpclient-inside-write-transaction-holds-locks.md diff --git a/community/knowledge/performance/isempty-before-findset-is-extra-round-trip.bad.al b/microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.bad.al similarity index 100% rename from community/knowledge/performance/isempty-before-findset-is-extra-round-trip.bad.al rename to microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.bad.al diff --git a/community/knowledge/performance/isempty-before-findset-is-extra-round-trip.good.al b/microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.good.al similarity index 100% rename from community/knowledge/performance/isempty-before-findset-is-extra-round-trip.good.al rename to microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.good.al diff --git a/community/knowledge/performance/isempty-before-findset-is-extra-round-trip.md b/microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.md similarity index 100% rename from community/knowledge/performance/isempty-before-findset-is-extra-round-trip.md rename to microsoft/knowledge/performance/isempty-before-findset-is-extra-round-trip.md diff --git a/community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.bad.al b/microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.bad.al similarity index 100% rename from community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.bad.al rename to microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.bad.al diff --git a/community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.good.al b/microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.good.al similarity index 100% rename from community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.good.al rename to microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.good.al diff --git a/community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.md b/microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.md similarity index 100% rename from community/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.md rename to microsoft/knowledge/performance/oncompanyopen-subscribers-must-not-do-io.md diff --git a/community/knowledge/performance/page-background-tasks-for-expensive-cues.bad.al b/microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.bad.al similarity index 100% rename from community/knowledge/performance/page-background-tasks-for-expensive-cues.bad.al rename to microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.bad.al diff --git a/community/knowledge/performance/page-background-tasks-for-expensive-cues.good.al b/microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.good.al similarity index 100% rename from community/knowledge/performance/page-background-tasks-for-expensive-cues.good.al rename to microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.good.al diff --git a/community/knowledge/performance/page-background-tasks-for-expensive-cues.md b/microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.md similarity index 100% rename from community/knowledge/performance/page-background-tasks-for-expensive-cues.md rename to microsoft/knowledge/performance/page-background-tasks-for-expensive-cues.md diff --git a/community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.bad.al b/microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.bad.al similarity index 100% rename from community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.bad.al rename to microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.bad.al diff --git a/community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.good.al b/microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.good.al similarity index 100% rename from community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.good.al rename to microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.good.al diff --git a/community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.md b/microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.md similarity index 100% rename from community/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.md rename to microsoft/knowledge/performance/pass-var-record-to-preserve-partial-load-enumerator.md diff --git a/community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.bad.al b/microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.bad.al similarity index 100% rename from community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.bad.al rename to microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.bad.al diff --git a/community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.good.al b/microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.good.al similarity index 100% rename from community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.good.al rename to microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.good.al diff --git a/community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.md b/microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.md similarity index 100% rename from community/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.md rename to microsoft/knowledge/performance/prefer-related-table-over-extension-on-hot-ledgers.md diff --git a/community/knowledge/performance/query-results-bypass-primary-key-cache.bad.al b/microsoft/knowledge/performance/query-results-bypass-primary-key-cache.bad.al similarity index 100% rename from community/knowledge/performance/query-results-bypass-primary-key-cache.bad.al rename to microsoft/knowledge/performance/query-results-bypass-primary-key-cache.bad.al diff --git a/community/knowledge/performance/query-results-bypass-primary-key-cache.good.al b/microsoft/knowledge/performance/query-results-bypass-primary-key-cache.good.al similarity index 100% rename from community/knowledge/performance/query-results-bypass-primary-key-cache.good.al rename to microsoft/knowledge/performance/query-results-bypass-primary-key-cache.good.al diff --git a/community/knowledge/performance/query-results-bypass-primary-key-cache.md b/microsoft/knowledge/performance/query-results-bypass-primary-key-cache.md similarity index 100% rename from community/knowledge/performance/query-results-bypass-primary-key-cache.md rename to microsoft/knowledge/performance/query-results-bypass-primary-key-cache.md diff --git a/community/knowledge/performance/reset-clears-partial-record-selection.bad.al b/microsoft/knowledge/performance/reset-clears-partial-record-selection.bad.al similarity index 100% rename from community/knowledge/performance/reset-clears-partial-record-selection.bad.al rename to microsoft/knowledge/performance/reset-clears-partial-record-selection.bad.al diff --git a/community/knowledge/performance/reset-clears-partial-record-selection.good.al b/microsoft/knowledge/performance/reset-clears-partial-record-selection.good.al similarity index 100% rename from community/knowledge/performance/reset-clears-partial-record-selection.good.al rename to microsoft/knowledge/performance/reset-clears-partial-record-selection.good.al diff --git a/community/knowledge/performance/reset-clears-partial-record-selection.md b/microsoft/knowledge/performance/reset-clears-partial-record-selection.md similarity index 100% rename from community/knowledge/performance/reset-clears-partial-record-selection.md rename to microsoft/knowledge/performance/reset-clears-partial-record-selection.md diff --git a/community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.bad.al b/microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.bad.al similarity index 100% rename from community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.bad.al rename to microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.bad.al diff --git a/community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.good.al b/microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.good.al similarity index 100% rename from community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.good.al rename to microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.good.al diff --git a/community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.md b/microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.md similarity index 100% rename from community/knowledge/performance/skip-setloadfields-on-write-and-transferfields.md rename to microsoft/knowledge/performance/skip-setloadfields-on-write-and-transferfields.md diff --git a/community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.bad.al b/microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.bad.al similarity index 100% rename from community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.bad.al rename to microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.bad.al diff --git a/community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.good.al b/microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.good.al similarity index 100% rename from community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.good.al rename to microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.good.al diff --git a/community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.md b/microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.md similarity index 100% rename from community/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.md rename to microsoft/knowledge/performance/use-dedicated-lookup-pages-not-full-lists.md diff --git a/community/knowledge/performance/validate-on-partial-record-forces-jit.bad.al b/microsoft/knowledge/performance/validate-on-partial-record-forces-jit.bad.al similarity index 100% rename from community/knowledge/performance/validate-on-partial-record-forces-jit.bad.al rename to microsoft/knowledge/performance/validate-on-partial-record-forces-jit.bad.al diff --git a/community/knowledge/performance/validate-on-partial-record-forces-jit.good.al b/microsoft/knowledge/performance/validate-on-partial-record-forces-jit.good.al similarity index 100% rename from community/knowledge/performance/validate-on-partial-record-forces-jit.good.al rename to microsoft/knowledge/performance/validate-on-partial-record-forces-jit.good.al diff --git a/community/knowledge/performance/validate-on-partial-record-forces-jit.md b/microsoft/knowledge/performance/validate-on-partial-record-forces-jit.md similarity index 100% rename from community/knowledge/performance/validate-on-partial-record-forces-jit.md rename to microsoft/knowledge/performance/validate-on-partial-record-forces-jit.md diff --git a/community/knowledge/security/guard-bulk-operations-with-istemporary.bad.al b/microsoft/knowledge/security/guard-bulk-operations-with-istemporary.bad.al similarity index 100% rename from community/knowledge/security/guard-bulk-operations-with-istemporary.bad.al rename to microsoft/knowledge/security/guard-bulk-operations-with-istemporary.bad.al diff --git a/community/knowledge/security/guard-bulk-operations-with-istemporary.good.al b/microsoft/knowledge/security/guard-bulk-operations-with-istemporary.good.al similarity index 100% rename from community/knowledge/security/guard-bulk-operations-with-istemporary.good.al rename to microsoft/knowledge/security/guard-bulk-operations-with-istemporary.good.al diff --git a/community/knowledge/security/guard-bulk-operations-with-istemporary.md b/microsoft/knowledge/security/guard-bulk-operations-with-istemporary.md similarity index 100% rename from community/knowledge/security/guard-bulk-operations-with-istemporary.md rename to microsoft/knowledge/security/guard-bulk-operations-with-istemporary.md diff --git a/community/knowledge/ui/factbox-design.md b/microsoft/knowledge/ui/factbox-design.md similarity index 100% rename from community/knowledge/ui/factbox-design.md rename to microsoft/knowledge/ui/factbox-design.md diff --git a/community/knowledge/ui/showmandatory-on-code-required-page-fields.bad.al b/microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.bad.al similarity index 100% rename from community/knowledge/ui/showmandatory-on-code-required-page-fields.bad.al rename to microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.bad.al diff --git a/community/knowledge/ui/showmandatory-on-code-required-page-fields.good.al b/microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.good.al similarity index 100% rename from community/knowledge/ui/showmandatory-on-code-required-page-fields.good.al rename to microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.good.al diff --git a/community/knowledge/ui/showmandatory-on-code-required-page-fields.md b/microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.md similarity index 100% rename from community/knowledge/ui/showmandatory-on-code-required-page-fields.md rename to microsoft/knowledge/ui/showmandatory-on-code-required-page-fields.md diff --git a/community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.bad.al b/microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.bad.al similarity index 100% rename from community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.bad.al rename to microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.bad.al diff --git a/community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.good.al b/microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.good.al similarity index 100% rename from community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.good.al rename to microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.good.al diff --git a/community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.md b/microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.md similarity index 100% rename from community/knowledge/ui/validate-request-page-input-in-onqueryclosepage.md rename to microsoft/knowledge/ui/validate-request-page-input-in-onqueryclosepage.md diff --git a/community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.bad.al b/microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.bad.al similarity index 100% rename from community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.bad.al rename to microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.bad.al diff --git a/community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.good.al b/microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.good.al similarity index 100% rename from community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.good.al rename to microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.good.al diff --git a/community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.md b/microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.md similarity index 100% rename from community/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.md rename to microsoft/knowledge/web-services/api-enum-values-are-a-contract-by-name-not-ordinal.md diff --git a/skills/write.md b/skills/write.md index 731f4698..8096f1ab 100644 --- a/skills/write.md +++ b/skills/write.md @@ -80,8 +80,10 @@ Knowledge files do not contain code. Samples live as **sibling files** next to t ## Choosing a layer -- **`/microsoft/knowledge//`** — platform-endorsed guidance. Authored or approved by the BC platform team. Use this layer only when the guidance reflects a platform guarantee or official recommendation. -- **`/community/knowledge//`** — shared community patterns. The default layer for contributions from outside the platform team. Content here can be promoted to `/microsoft/` once it proves itself. +In the shared upstream layers, keep an action skill and the canonical knowledge it acts on in the same layer. The action skill's ownership determines the destination; the author's affiliation does not. Do not use `/community/knowledge/` as a staging area for articles in a domain already owned by a Microsoft-endorsed skill. A cross-layer split is acceptable only as a short-lived migration state while the skill or corpus is being promoted. Custom overrides are intentionally exempt because they extend shared skills from a consumer fork. + +- **`/microsoft/knowledge//`** — guidance owned by a Microsoft-endorsed action skill. It has been approved as platform-endorsed guidance, whether authored by Microsoft or contributed by the community. +- **`/community/knowledge//`** — knowledge that accompanies a community-owned action skill. Promote the knowledge with the skill when that skill becomes Microsoft-endorsed. - **`/custom/knowledge//`** — partner or customer overrides. Generally does not appear in the BCQuality repository itself; `/custom/` lives in consumer repositories. ### Writing to `/custom/` — fork precondition