Skip to content

Libraries APIs are fully documented using efficient workflows #44969

Description

@carlossanlop

Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

  • We only use triple slash comments in source for seeding the documentation.
  • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
  • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
  • Once they get merged, the triple slash comments in source become obsolete.
  • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
  • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
  • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
  • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
  • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
  • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

  • Overall feasibility and promise of the new process
  • An assessment of contributor satisfaction with the new process
  • An understanding of the challenges that would need to be overcome across the remaining libraries
  • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

We will continue this plan in .NET 8.


Bring documentation from Docs to triple slash

Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

Remarks

We won't backport remarks for the following reasons:

  • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
  • They aren't shown in VS intellisense.
  • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
  • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

.NET Framework-only APIs

APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

Tasks

Here we will list the assemblies that got their documentation backported.

To do - Add one item per assembly and link to PRs as they are created.


Merge blocking label and docs reviewers

We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

Tasks
  • Make the new-api-needs-documentation label mandatory.
  • Automatically add language reviewers to PRs adding new APIs.
  • Update our readmes to describe the purpose of the label and what to expect from a PR review.

Automatic Docs build

Note: We can only begin this work if we finished backporting the documentation from all assemblies.

Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

Tasks
  • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
  • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

Debt prevention and docs fixes

At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

Tasks
  • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
  • Add bot task to automatically add area labels to dotnet-api-docs issues.
  • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
  • Consider Docs for our sprint planning and triaging. cc @jeffhandley
  • Update readme with new guidance on debt prevention and docs fixes.

Low pri / Nice to have

The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

  • - Add CI validation to the code snippets in the dotnet-api-docs repo.
  • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
  • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

Questions and suggestions are welcome.

Metadata

Metadata

Assignees

Labels

Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

Type

No type

Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
     blocks
    (function() {
    function addCopyButtons() {
    document.querySelectorAll('pre code').forEach(function(codeBlock) {
    if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
    codeBlock.parentElement.setAttribute('data-copy-added', 'true');
    var btn = document.createElement('button');
    btn.textContent = 'Copy';
    btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
    btn.onmouseover = function() { this.style.opacity = '1'; };
    btn.onmouseout = function() { this.style.opacity = '0.7'; };
    btn.onclick = function() {
    navigator.clipboard.writeText(codeBlock.textContent).then(function() {
    btn.textContent = 'Copied!';
    setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
    });
    };
    codeBlock.parentElement.style.position = 'relative';
    codeBlock.parentElement.appendChild(btn);
    });
    }
    addCopyButtons();
    // Re-run on dynamic content
    var observer = new MutationObserver(addCopyButtons);
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
    Skip to content

    Libraries APIs are fully documented using efficient workflows #44969

    Description

    @carlossanlop

    Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

    • We only use triple slash comments in source for seeding the documentation.
    • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
    • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
    • Once they get merged, the triple slash comments in source become obsolete.
    • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
    • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
    • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
    • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
    • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
    • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

    We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

    • Overall feasibility and promise of the new process
    • An assessment of contributor satisfaction with the new process
    • An understanding of the challenges that would need to be overcome across the remaining libraries
    • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

    We will continue this plan in .NET 8.


    Bring documentation from Docs to triple slash

    Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

    We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

    Remarks

    We won't backport remarks for the following reasons:

    • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
    • They aren't shown in VS intellisense.
    • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
    • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

    .NET Framework-only APIs

    APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

    APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

    Tasks

    Here we will list the assemblies that got their documentation backported.

    To do - Add one item per assembly and link to PRs as they are created.


    Merge blocking label and docs reviewers

    We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

    Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

    We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

    Tasks
    • Make the new-api-needs-documentation label mandatory.
    • Automatically add language reviewers to PRs adding new APIs.
    • Update our readmes to describe the purpose of the label and what to expect from a PR review.

    Automatic Docs build

    Note: We can only begin this work if we finished backporting the documentation from all assemblies.

    Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

    From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

    Tasks
    • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
    • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

    Debt prevention and docs fixes

    At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

    Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

    Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

    Tasks
    • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
    • Add bot task to automatically add area labels to dotnet-api-docs issues.
    • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
    • Consider Docs for our sprint planning and triaging. cc @jeffhandley
    • Update readme with new guidance on debt prevention and docs fixes.

    Low pri / Nice to have

    The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

    • - Add CI validation to the code snippets in the dotnet-api-docs repo.
    • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
    • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

    Questions and suggestions are welcome.

    Metadata

    Metadata

    Assignees

    Labels

    Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

    Type

    No type

    Projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
      Skip to content

      Libraries APIs are fully documented using efficient workflows #44969

      Description

      @carlossanlop

      Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

      • We only use triple slash comments in source for seeding the documentation.
      • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
      • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
      • Once they get merged, the triple slash comments in source become obsolete.
      • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
      • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
      • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
      • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
      • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
      • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

      We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

      • Overall feasibility and promise of the new process
      • An assessment of contributor satisfaction with the new process
      • An understanding of the challenges that would need to be overcome across the remaining libraries
      • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

      We will continue this plan in .NET 8.


      Bring documentation from Docs to triple slash

      Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

      We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

      Remarks

      We won't backport remarks for the following reasons:

      • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
      • They aren't shown in VS intellisense.
      • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
      • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

      .NET Framework-only APIs

      APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

      APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

      Tasks

      Here we will list the assemblies that got their documentation backported.

      To do - Add one item per assembly and link to PRs as they are created.


      Merge blocking label and docs reviewers

      We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

      Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

      We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

      Tasks
      • Make the new-api-needs-documentation label mandatory.
      • Automatically add language reviewers to PRs adding new APIs.
      • Update our readmes to describe the purpose of the label and what to expect from a PR review.

      Automatic Docs build

      Note: We can only begin this work if we finished backporting the documentation from all assemblies.

      Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

      From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

      Tasks
      • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
      • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

      Debt prevention and docs fixes

      At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

      Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

      Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

      Tasks
      • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
      • Add bot task to automatically add area labels to dotnet-api-docs issues.
      • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
      • Consider Docs for our sprint planning and triaging. cc @jeffhandley
      • Update readme with new guidance on debt prevention and docs fixes.

      Low pri / Nice to have

      The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

      • - Add CI validation to the code snippets in the dotnet-api-docs repo.
      • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
      • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

      Questions and suggestions are welcome.

      Metadata

      Metadata

      Assignees

      Labels

      Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

      Type

      No type

      Projects

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
        Skip to content

        Libraries APIs are fully documented using efficient workflows #44969

        Description

        @carlossanlop

        Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

        • We only use triple slash comments in source for seeding the documentation.
        • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
        • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
        • Once they get merged, the triple slash comments in source become obsolete.
        • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
        • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
        • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
        • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
        • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
        • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

        We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

        • Overall feasibility and promise of the new process
        • An assessment of contributor satisfaction with the new process
        • An understanding of the challenges that would need to be overcome across the remaining libraries
        • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

        We will continue this plan in .NET 8.


        Bring documentation from Docs to triple slash

        Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

        We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

        Remarks

        We won't backport remarks for the following reasons:

        • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
        • They aren't shown in VS intellisense.
        • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
        • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

        .NET Framework-only APIs

        APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

        APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

        Tasks

        Here we will list the assemblies that got their documentation backported.

        To do - Add one item per assembly and link to PRs as they are created.


        Merge blocking label and docs reviewers

        We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

        Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

        We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

        Tasks
        • Make the new-api-needs-documentation label mandatory.
        • Automatically add language reviewers to PRs adding new APIs.
        • Update our readmes to describe the purpose of the label and what to expect from a PR review.

        Automatic Docs build

        Note: We can only begin this work if we finished backporting the documentation from all assemblies.

        Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

        From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

        Tasks
        • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
        • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

        Debt prevention and docs fixes

        At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

        Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

        Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

        Tasks
        • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
        • Add bot task to automatically add area labels to dotnet-api-docs issues.
        • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
        • Consider Docs for our sprint planning and triaging. cc @jeffhandley
        • Update readme with new guidance on debt prevention and docs fixes.

        Low pri / Nice to have

        The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

        • - Add CI validation to the code snippets in the dotnet-api-docs repo.
        • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
        • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

        Questions and suggestions are welcome.

        Metadata

        Metadata

        Assignees

        Labels

        Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

        Type

        No type

        Projects

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
          Skip to content

          Libraries APIs are fully documented using efficient workflows #44969

          Description

          @carlossanlop

          Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

          • We only use triple slash comments in source for seeding the documentation.
          • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
          • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
          • Once they get merged, the triple slash comments in source become obsolete.
          • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
          • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
          • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
          • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
          • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
          • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

          We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

          • Overall feasibility and promise of the new process
          • An assessment of contributor satisfaction with the new process
          • An understanding of the challenges that would need to be overcome across the remaining libraries
          • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

          We will continue this plan in .NET 8.


          Bring documentation from Docs to triple slash

          Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

          We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

          Remarks

          We won't backport remarks for the following reasons:

          • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
          • They aren't shown in VS intellisense.
          • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
          • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

          .NET Framework-only APIs

          APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

          APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

          Tasks

          Here we will list the assemblies that got their documentation backported.

          To do - Add one item per assembly and link to PRs as they are created.


          Merge blocking label and docs reviewers

          We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

          Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

          We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

          Tasks
          • Make the new-api-needs-documentation label mandatory.
          • Automatically add language reviewers to PRs adding new APIs.
          • Update our readmes to describe the purpose of the label and what to expect from a PR review.

          Automatic Docs build

          Note: We can only begin this work if we finished backporting the documentation from all assemblies.

          Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

          From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

          Tasks
          • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
          • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

          Debt prevention and docs fixes

          At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

          Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

          Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

          Tasks
          • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
          • Add bot task to automatically add area labels to dotnet-api-docs issues.
          • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
          • Consider Docs for our sprint planning and triaging. cc @jeffhandley
          • Update readme with new guidance on debt prevention and docs fixes.

          Low pri / Nice to have

          The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

          • - Add CI validation to the code snippets in the dotnet-api-docs repo.
          • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
          • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

          Questions and suggestions are welcome.

          Metadata

          Metadata

          Assignees

          Labels

          Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

          Type

          No type

          Projects

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
            Skip to content

            Libraries APIs are fully documented using efficient workflows #44969

            Description

            @carlossanlop

            Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

            • We only use triple slash comments in source for seeding the documentation.
            • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
            • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
            • Once they get merged, the triple slash comments in source become obsolete.
            • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
            • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
            • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
            • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
            • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
            • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

            We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

            • Overall feasibility and promise of the new process
            • An assessment of contributor satisfaction with the new process
            • An understanding of the challenges that would need to be overcome across the remaining libraries
            • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

            We will continue this plan in .NET 8.


            Bring documentation from Docs to triple slash

            Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

            We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

            Remarks

            We won't backport remarks for the following reasons:

            • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
            • They aren't shown in VS intellisense.
            • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
            • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

            .NET Framework-only APIs

            APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

            APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

            Tasks

            Here we will list the assemblies that got their documentation backported.

            To do - Add one item per assembly and link to PRs as they are created.


            Merge blocking label and docs reviewers

            We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

            Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

            We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

            Tasks
            • Make the new-api-needs-documentation label mandatory.
            • Automatically add language reviewers to PRs adding new APIs.
            • Update our readmes to describe the purpose of the label and what to expect from a PR review.

            Automatic Docs build

            Note: We can only begin this work if we finished backporting the documentation from all assemblies.

            Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

            From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

            Tasks
            • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
            • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

            Debt prevention and docs fixes

            At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

            Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

            Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

            Tasks
            • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
            • Add bot task to automatically add area labels to dotnet-api-docs issues.
            • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
            • Consider Docs for our sprint planning and triaging. cc @jeffhandley
            • Update readme with new guidance on debt prevention and docs fixes.

            Low pri / Nice to have

            The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

            • - Add CI validation to the code snippets in the dotnet-api-docs repo.
            • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
            • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

            Questions and suggestions are welcome.

            Metadata

            Metadata

            Assignees

            Labels

            Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

            Type

            No type

            Projects

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
              Skip to content

              Libraries APIs are fully documented using efficient workflows #44969

              Description

              @carlossanlop

              Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

              • We only use triple slash comments in source for seeding the documentation.
              • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
              • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
              • Once they get merged, the triple slash comments in source become obsolete.
              • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
              • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
              • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
              • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
              • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
              • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

              We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

              • Overall feasibility and promise of the new process
              • An assessment of contributor satisfaction with the new process
              • An understanding of the challenges that would need to be overcome across the remaining libraries
              • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

              We will continue this plan in .NET 8.


              Bring documentation from Docs to triple slash

              Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

              We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

              Remarks

              We won't backport remarks for the following reasons:

              • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
              • They aren't shown in VS intellisense.
              • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
              • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

              .NET Framework-only APIs

              APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

              APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

              Tasks

              Here we will list the assemblies that got their documentation backported.

              To do - Add one item per assembly and link to PRs as they are created.


              Merge blocking label and docs reviewers

              We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

              Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

              We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

              Tasks
              • Make the new-api-needs-documentation label mandatory.
              • Automatically add language reviewers to PRs adding new APIs.
              • Update our readmes to describe the purpose of the label and what to expect from a PR review.

              Automatic Docs build

              Note: We can only begin this work if we finished backporting the documentation from all assemblies.

              Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

              From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

              Tasks
              • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
              • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

              Debt prevention and docs fixes

              At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

              Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

              Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

              Tasks
              • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
              • Add bot task to automatically add area labels to dotnet-api-docs issues.
              • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
              • Consider Docs for our sprint planning and triaging. cc @jeffhandley
              • Update readme with new guidance on debt prevention and docs fixes.

              Low pri / Nice to have

              The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

              • - Add CI validation to the code snippets in the dotnet-api-docs repo.
              • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
              • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

              Questions and suggestions are welcome.

              Metadata

              Metadata

              Assignees

              Labels

              Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

              Type

              No type

              Projects

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Libraries APIs are fully documented using efficient workflows · Issue #44969 · dotnet/runtime · GitHub
                Skip to content

                Libraries APIs are fully documented using efficient workflows #44969

                Description

                @carlossanlop

                Today, some of our source code repos like Runtime, WPF, WinForms and WCF, consider the dotnet-api-docs repo the source of truth for their documentation. This poses some challenges:

                • We only use triple slash comments in source for seeding the documentation.
                • We have to manually port these comments to dotnet-api-docs so they show up both in MS Docs and in IntelliSense.
                • Before the ported comments get merged in dotnet-api-docs, they need to go through language review, which may change the contents considerably.
                • Once they get merged, the triple slash comments in source become obsolete.
                • We depend on the Docs build system to generate IntelliSense for us with the language-reviewed contents.
                • We need to consume the generated IntelliSense in the source code repos via a nuget package to make it available in the published SDK.
                • Any documentation changes/fixes need to be done in dotnet-api-docs, which may cause even greater discrepancies with the original triple slash comments, unless the developer also submits a PR to fix the comments there.
                • This complex manual process and the dependency round trip made it difficult to ensure APIs introduced in 1.x and 2.x were fully documented in MS Docs and IntelliSense. We improved our process for 3.x and 5.0 and prevented documentation debt in those versions, but we still had to do the whole process manually.
                • The fact that dotnet-api-docs shows shared documentation for .NET Core and .NET Framework is one of the main reasons why this process has remained the way it currently is.
                • We rarely add code examples to new APIs. The few examples we have, live in dotnet-api-docs. Some of the existing ones use obsolete APIs, or APIs that only exist in .NET Framework, or show old coding conventions.

                We would like to propose a series of changes in our documentation process that will simplify the developer's role and automate some of the steps. During .NET 6, we piloted this new documentation process with a subset of the .NET Libraries. That pilot produced the following outputs:

                • Overall feasibility and promise of the new process
                • An assessment of contributor satisfaction with the new process
                • An understanding of the challenges that would need to be overcome across the remaining libraries
                • A project plan for either completing the migration or canceling the pilot and reverting to the previous process, with a new User Story created and all involved work estimated

                We will continue this plan in .NET 8.


                Bring documentation from Docs to triple slash

                Substitute all the triple slash comments in source code with the language-reviewed documentation that exists in dotnet-api-docs. We will do this on an assembly by assembly basis, and will enable the MSBuild property <GenerateDocumentationFile> to ensure new public APIs cause a build warning when they don't have documentation.

                We will be using the dotnet/api-docs-sync PortToTripleSlash tool for this effort, for which I added the feature to port dotnet-api-docs to triple slash comments: https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

                Remarks

                We won't backport remarks for the following reasons:

                • They are bulky. Really long remarks would have to be moved to external files and linked in the triple slash comments.
                • They aren't shown in VS intellisense.
                • Remarks usually contain links to code example external files. Files with code snippets will remain in the dotnet-api-docs repo, untouched. When (and if) we backport remarks containing links to those code snippets, the links will be relative to the dotnet-api-docs repo.
                • Remarks also contain embedded markdown code snippets. They would have to be moved to their own files and merged directly in dotnet-api-docs, to avoid having huge triple slash comments sections.

                .NET Framework-only APIs

                APIs that only exist in .NET Framework will continue having dotnet-api-docs as its source of truth.

                APIs that are shared by both .NET Core and .NET Framework will have their source of truth in triple slash comments in .NET Core, making sure we preserve the differences in behavior between versions.

                Tasks

                Here we will list the assemblies that got their documentation backported.

                To do - Add one item per assembly and link to PRs as they are created.


                Merge blocking label and docs reviewers

                We already have a bot task that automatically adds the new-api-needs-documentation label to PRs that are introducing new public APIs, but we want to make sure it also becomes a merge blocker, like the * NO MERGE * label does.

                Once the PR has been reviewed by a maintainer, and they confirmed the new APIs have proper documentation, the label can be manually removed to unblock merging.

                We also want the bot to automatically add the @dotnet/docs members as PR reviewers for language review.

                Tasks
                • Make the new-api-needs-documentation label mandatory.
                • Automatically add language reviewers to PRs adding new APIs.
                • Update our readmes to describe the purpose of the label and what to expect from a PR review.

                Automatic Docs build

                Note: We can only begin this work if we finished backporting the documentation from all assemblies.

                Currently, whenever new APIs are added to the source code repos, we send the updated ref assemblies to the Docs team so they feed them to the Docs build system, which causes the regeneration of the dotnet-api-docs xml files, showing the new APIs. After this point, we can then manually port the documentation from triple slash, using https://github.com/dotnet/api-docs-sync/tree/main/src/PortToTripleSlash

                From now on, we want to automate the process by automatically merging the ref assembly drop (it's just a commit in an internal repo). This drop will also contain the build-generated IntelliSense xmls, which would now contain the documentation source of truth, removing the step of manual porting.

                Tasks
                • Automatically ship our generated intellisense packages to customers, instead of the ones we normally would bring from the dotnet-api-docs internal feed.
                • Exclude assemblies with backported documentation from the ref assemblies drop. Instead, just include the intellisense xml.

                Debt prevention and docs fixes

                At the time of writing this document, we have 900+ issues open in the dotnet-api-docs repo. We would like to consider these as part of the regular work planning for our dev teams, and we want to make it easier to filter issues by area by automatically adding labels using a bot, and area owners should be notified (on a subscription basis, like in runtime).

                Contributors will still be able to report documentation issues in dotnet-api-docs, but fixes will now be done directly in triple slash comments in source. PRs will be disabled in dotnet-api-docs except for maintainers.

                Documentation for APIs that only exist .NET Framework will continue to be done directly in dotnet-api-docs (that will be its source of truth).

                Tasks
                • Finish documenting APIs introduced in 1.x and 2.x, 3.x, 5.x, 6.x and 7.x (dotnet/runtime/projects/60)
                • Add bot task to automatically add area labels to dotnet-api-docs issues.
                • Update fabric bot that auto-mention people, to be onboarded for dotnet-api-docs, so that only subscribed users can get mentioned in comments of new docs issues.
                • Consider Docs for our sprint planning and triaging. cc @jeffhandley
                • Update readme with new guidance on debt prevention and docs fixes.

                Low pri / Nice to have

                The following are tasks that are out of scope for this effort, but we would like to consider in the near future:

                • - Add CI validation to the code snippets in the dotnet-api-docs repo.
                • - Redirect the MS Docs Edit button to the source code file instead of the dotnet-api-docs xml file. To achieve this, we would also have to include PDBs in the drop that contains the ref assemblies and xmls, and the Docs team would have to read them to determine the location of the source code for an API.
                • - Consider creating a new PR label needs doc update that would also become merge blocking, to ensure documentation gets updated when behavior is changed. Here is a good argument in favor of that.

                Questions and suggestions are welcome.

                Metadata

                Metadata

                Assignees

                Labels

                Cost:XLWork that requires one engineer more than 4 weeksEpicGroups multiple user stories. Can be grouped under a theme.Team:Librariesarea-Meta

                Type

                No type

                Projects

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions