Patent Description:
Some software programs interact directly with people to get commands and input, and to display results. Of these, many programs permit a vast number of different user interaction sequences, some of which may get better results than others. To help people make better use of these programs, various kinds of program documentation may be provided, such as user manuals, tutorials, reviews, user group forum discussions, program developer or vendor blog postings, release notes, and technical support chat sessions. Such program documentation often contains helpful information, but it can be very challenging for a user to find relevant information, even with the help of search aids such as tables of content, headings, indexes, and keyword search engines.

Accordingly, improvements that make relevant program documentation easier to obtain would be beneficial. <CIT> describes how a system, method and apparatus assesses a risk of one or more assets within an operational technology infrastructure by providing a database containing data relating to the one or more assets, calculating a threat score for the one or more assets using one or more processors communicably coupled to the database, calculating a vulnerability score for the one or more assets using the one or more processors, calculating an impact score for the one or more assets using the one or more processors, and determining the risk of the one or more assets based on the threat score, the vulnerability score and the impact score using the one or more processors.

Some embodiments compare a current situation of a program user who is trying to solve a particular problem using a program as a development tool, to a mitigation graph that represents user actions noted and program actions noted during interactions between a copy of the program and other users. After mapping the current problem to the mitigation graph, an embodiment offers possible interaction sequences to the current user, based on the results obtained by other users who pursued the same or different interaction sequences.

In some cases, interaction sequences are presented as documentation that is contextualized to the current problem; this documentation is synthesized live during the current user's session. The synthesized contextual documentation may also be interactive, in that it contains more than mere text and images; receiving a user click or button press in the synthesized documentation may mitigate the current problem, e.g., by instructing the program to perform certain commands, or by installing certain additional or updated software or data. Other contextual assistance and interactive documentation tools and techniques are also described herein.

Some development tool user assistance embodiments use or provide a computing hardware and software combination which includes a digital memory and a processor which is in operable communication with the memory. The processor is configured, e.g., by tailored software, to perform development tool user assistance steps, that is, providing assistance to a user of a development tool. Such an embodiment may include a development tool having a user interface. The development tool user assistance steps may include (a) obtaining development problem information from the development tool, (b) mapping the development problem information to a problem matching node in a mitigation graph which has multiple nodes, the mitigation graph nodes collectively representing actions by users during development tool sessions, the mitigation graph also containing action metadata which indicates action cost or action desirability or both, (c) based at least in part on the problem matching node and the action metadata, identifying at least one action sequence for mitigating the development problem, and (d) visually presenting the at least one action sequence to a current user of the development tool.

Some embodiments use or provide steps for a method for development tool user assistance. The steps may include: obtaining development problem information from a development tool; mapping the development problem information to a problem matching node in a mitigation graph which has multiple nodes, the mitigation graph nodes collectively representing actions by users during development tool sessions, the mitigation graph also containing action metadata which indicates action cost or action desirability or both; synthesizing documentation based at least in part on the problem matching node and the action metadata; and visually presenting the synthesized documentation to a current user of the development tool.

Some embodiments use or provide a computer-readable storage medium configured with data and instructions, or use other computing items, which upon execution by a processor cause a computing system to perform a method for development tool user assistance. This method includes: obtaining development problem information from a development tool; mapping the development problem information to a problem matching node in a mitigation graph which has multiple nodes, the mitigation graph nodes collectively representing actions by a set of users and multiple development tool sessions, the mitigation graph also containing action metadata which indicates action cost or action desirability or both; selecting a development problem mitigation action sequence based on the action metadata; synthesizing interactive contextual documentation based at least in part on the problem matching node and the action metadata, the synthesized interactive contextual documentation including at least one interaction interface for activation of the development problem mitigation action sequence; and visually presenting the synthesized interactive contextual documentation to a current user of the development tool.

Other technical activities and characteristics pertinent to teachings herein will also become apparent to those of skill in the art. The examples given are merely illustrative. Rather, this Summary is provided to introduce - in a simplified form - some technical concepts that are further described below in the Detailed Description. The innovation is defined with claims as properly understood, and to the extent this Summary conflicts with the claims, the claims should prevail.

A more particular description will be given with reference to the attached drawings. These drawings only illustrate selected aspects and thus do not fully determine coverage or scope.

Innovations may expand beyond their origins, but understanding an innovation's origins can help one more fully appreciate the innovation. In the present case, some teachings described herein were motivated by technical challenges faced by Microsoft innovators who were working to improve the usability, efficiency, and effectiveness of Microsoft software development tool offerings, including versions of Microsoft integrated development environments, e.g., Visual Studio Code™ and Visual Studio® software development environments (marks of Microsoft Corporation).

However, teachings herein also apply to other software development tools. Indeed, teachings herein may also be implemented to enhance other kinds of development tools, e.g., computer aided design tools, 2D or 3D modeling tools, animation tools, graphic design tools, project management tools, industrial control tools, semiconductor layout tools, and many other tools that have user interfaces which present human users with hundreds of (or more) possible interaction sequences.

In particular, teachings herein can be applied to supplement existing documentation for such development tools, by synthesizing documentation that is contextualized to a particular user's current problem. Synthesized documentation may be based on activity by other users faced with the same or similar problems. In some cases, the synthesized documentation may also enable an enhanced documentation system to go beyond document display operations, by providing interactivity in order to mitigate the user's current problem, such as by instructing the development tool or installing additional software or data.

The innovators observed familiar documentation systems which are static and lack intelligence for actively tailoring documentation to a current problem and proactively suggesting courses of action. Once a user is no longer a novice in the use of a particular tool, finding relevant documentation to solve particular problems that occur during use of the tool can be difficult.

By contrast, some embodiments described herein provide relevant documentation in a dynamic and reactive manner, allowing users to employ the documentation to interact with other software to mitigate the user's current problem, and toiling on behalf of the user. Some documentation provided in such embodiments is contextual, and branching, so a user need not spend time and attention on information that is not relevant to the user's current problem. In some embodiments, documentation content is automatically triggered and presented to the user. If a problem occurs while the user is using the enhanced development tool, the user is alerted promptly to the problem, and given mitigation suggestions, in a dynamic manner.

In view of the foregoing, some embodiments described herein help users help themselves automatically, reduce tool interaction friction, improve productivity, reduce or remove maintenance, help users solve problems and get unblocked, improve vendor communication with users, and increase efficiency and productivity, freeing development tool user time for other work.

Thus, a technical challenge faced by the innovators was to how to automatically and efficiently determine a development tool user's current situation and compare it to similar or identical situations previously faced by other users of the development tool. One emergent subsidiary challenge was to determine what aspects of a user's current situation should be monitored, and also what aspects should not be monitored. Another technical challenge was how to present suggestions to the current user to help mitigate problems faced in the current situation. One of skill will recognize these and other technical challenges as they are addressed at various points within the present disclosure.

With reference to <FIG>, an operating environment <NUM> for an embodiment includes at least one computer system <NUM>. The computer system <NUM> may be a multiprocessor computer system, or not. An operating environment may include one or more machines in a given computer system, which may be clustered, client-server networked, and/or peer-to-peer networked within a cloud. An individual machine is a computer system, and a network or other group of cooperating machines is also a computer system. A given computer system <NUM> may be configured for end-users, e.g., with applications, for administrators, as a server, as a distributed processing node, and/or in other ways.

Human users <NUM> may interact with the computer system <NUM> by using displays, keyboards, and other peripherals <NUM>, via typed text, touch, voice, movement, computer vision, gestures, and/or other forms of I/O. A screen <NUM> may be a removable peripheral <NUM> or may be an integral part of the system <NUM>. A user interface may support interaction between an embodiment and one or more human users. A user interface may include a command line interface, a graphical user interface (GUI), natural user interface (NUI), voice command interface, and/or other user interface (UI) presentations, which may be presented as distinct options or may be integrated.

System administrators, network administrators, cloud administrators, operations personnel, developers, testers, engineers, auditors, and end-users are each a particular type of user <NUM>. Automated agents, scripts, playback software, devices, and the like acting on behalf of one or more people may also be users <NUM>, e.g., to facilitate testing a system <NUM>. Storage devices and/or networking devices may be considered peripheral equipment in some embodiments and part of a system <NUM> in other embodiments, depending on their detachability from the processor <NUM>. Other computer systems not shown in <FIG> may interact in technological ways with the computer system <NUM> or with another system embodiment using one or more connections to a network <NUM> via network interface equipment, for example.

Each computer system <NUM> includes at least one processor <NUM>. The computer system <NUM>, like other suitable systems, also includes one or more computer-readable storage media <NUM>. Storage media <NUM> may be of different physical types. The storage media <NUM> may be volatile memory, non-volatile memory, fixed in place media, removable media, magnetic media, optical media, solid-state media, and/or of other types of physical durable storage media (as opposed to merely a propagated signal or mere energy). In particular, a configured storage medium <NUM> such as a portable (i.e., external) hard drive, CD, DVD, memory stick, or other removable non-volatile memory medium may become functionally a technological part of the computer system when inserted or otherwise installed, making its content accessible for interaction with and use by processor <NUM>. The removable configured storage medium <NUM> is an example of a computer-readable storage medium <NUM>. Some other examples of computer-readable storage media <NUM> include built-in RAM, ROM, hard disks, and other memory storage devices which are not readily removable by users <NUM>. For compliance with current United States patent requirements, neither a computer-readable medium nor a computer-readable storage medium nor a computer-readable memory is a signal per se or mere energy under any claim pending or granted in the United States.

The storage medium <NUM> is configured with binary instructions <NUM> that are executable by a processor <NUM>; "executable" is used in a broad sense herein to include machine code, interpretable code, bytecode, and/or code that runs on a virtual machine, for example. The storage medium <NUM> is also configured with data <NUM> which is created, modified, referenced, and/or otherwise used for technical effect by execution of the instructions <NUM>. The instructions <NUM> and the data <NUM> configure the memory or other storage medium <NUM> in which they reside; when that memory or other computer readable storage medium is a functional part of a given computer system, the instructions <NUM> and data <NUM> also configure that computer system. In some embodiments, a portion of the data <NUM> is representative of real-world items such as product characteristics, inventories, physical measurements, settings, images, readings, targets, volumes, and so forth. Such data is also transformed by backup, restore, commits, aborts, reformatting, and/or other technical operations.

Although an embodiment may be described as being implemented as software instructions executed by one or more processors in a computing device (e.g., general purpose computer, server, or cluster), such description is not meant to exhaust all possible embodiments. One of skill will understand that the same or similar functionality can also often be implemented, in whole or in part, directly in hardware logic, to provide the same or similar technical effects. Alternatively, or in addition to software implementation, the technical functionality described herein can be performed, at least in part, by one or more hardware logic components. For example, and without excluding other implementations, an embodiment may include hardware logic components <NUM>, <NUM> such as Field-Programmable Gate Arrays (FPGAs), Application-Specific Integrated Circuits (ASICs), Application-Specific Standard Products (ASSPs), System-on-a-Chip components (SOCs), Complex Programmable Logic Devices (CPLDs), and similar components. Components of an embodiment may be grouped into interacting functional modules based on their inputs, outputs, and/or their technical effects, for example.

In addition to processors <NUM> (e.g., CPUs, ALUs, FPUs, TPUs and/or GPUs), memory / storage media <NUM>, and displays <NUM>, an operating environment may also include other hardware <NUM>, such as batteries, buses, power supplies, wired and wireless network interface cards, for instance. The nouns "screen" and "display" are used interchangeably herein. A display <NUM> may include one or more touch screens, screens responsive to input from a pen or tablet, or screens which operate solely for output. In some embodiments, peripherals <NUM> such as human user I/O devices (screen, keyboard, mouse, tablet, microphone, speaker, motion sensor, etc.) will be present in operable communication with one or more processors <NUM> and memory.

In some embodiments, the system includes multiple computers connected by a wired and/or wireless network <NUM>. Networking interface equipment <NUM> can provide access to networks <NUM>, using network components such as a packet-switched network interface card, a wireless transceiver, or a telephone network interface, for example, which may be present in a given computer system. Virtualizations of networking interface equipment and other network components such as switches or routers or firewalls may also be present, e.g., in a software-defined network or a sandboxed or other secure cloud computing environment. In some embodiments, one or more computers are partially or fully "air gapped" by reason of being disconnected or only intermittently connected to another networked device or remote cloud or enterprise network. In particular, functionality for development tool user assistance, such as problem contextualized documentation synthesis and presentation functionality, could be installed on an air gapped network and then be updated periodically or on occasion using removable media. A given embodiment may also communicate technical data and/or technical instructions through direct memory access, removable nonvolatile storage media, or other information storage-retrieval and/or transmission approaches.

One of skill will appreciate that the foregoing aspects and other aspects presented herein under "Operating Environments" may form part of a given embodiment. This document's headings are not intended to provide a strict classification of features into embodiment and non-embodiment feature sets.

One or more items are shown in outline form in the Figures, or listed inside parentheses, to emphasize that they are not necessarily part of the illustrated operating environment or all embodiments, but may interoperate with items in the operating environment or some embodiments as discussed herein. It does not follow that items not in outline or parenthetical form are necessarily required, in any Figure or any embodiment. In particular, <FIG> is provided for convenience; inclusion of an item in <FIG> does not imply that the item, or the described use of the item, was known prior to the current innovations.

<FIG> illustrate an environment having an enhanced system <NUM>, <NUM> that includes functionality <NUM> for development tool user assistance. In some embodiments, the functionality <NUM> is divided between different machines <NUM>, as indicated in <FIG>, while in others the functionality <NUM> resides on a single machine <NUM>, as indicated in <FIG>.

Although <FIG> also differ in other ways, those other differences are not unique to a multiple machine configuration (e.g., per <FIG>) or to a single machine configuration (e.g., per <FIG>). Rather, a multiple machine configuration may include items that are shown expressly in <FIG> or in <FIG> or both, and likewise a single machine configuration may include items that are shown expressly in <FIG> or in <FIG> or both.

Also, machines or processes within an enhanced system <NUM> may be networked generally or communicate in particular (via network or otherwise) with one another and with external devices (e.g., public search engines, public translation engines) through one or more interfaces <NUM>. An interface <NUM> may include hardware such as network interface cards, software such as network stacks, APIs, or sockets, combination items such as network connections, or a combination thereof.

The illustrated enhanced systems <NUM> include a development tool <NUM> which is enhanced to include or to communicate with a software-implemented assistant <NUM>, which may also be referred to as "assistance software" or "user assistance software" or the like. The development tool user assistance functionality <NUM> includes at least the assistance software <NUM> and its constituent data structure functionality, and the enhancements that allow the development tool <NUM> to communicate with the assistance software <NUM>.

The illustrated assistance software <NUM> data structure functionality includes at least a mitigation graph <NUM>, a mapper <NUM> that maps problem info <NUM> to the mitigation graph <NUM>, a mitigation sequence selector <NUM> that selects a mitigation sequence <NUM> based on the mapped problem info and the mitigation graph, and a mitigation sequence presenter <NUM> that presents one or more selected mitigation sequences <NUM> to the user <NUM> to assist the user with problem mitigation.

The mitigation graph <NUM> includes nodes <NUM> connected by edges <NUM>, and action metadata <NUM>. The action metadata <NUM> may be implemented as part of the nodes <NUM>, as part of the edges <NUM>, or both. The action metadata <NUM> includes or is derived computationally from user action data <NUM> and internal tool action data <NUM>. Examples of action metadata <NUM> are discussed at various points herein. Some embodiments include a filter <NUM> which excludes or anonymizes personally identifiable information <NUM> that is in the action data <NUM>, <NUM> so that vulnerable PII <NUM> is not part of the action metadata <NUM>.

Mitigation sequences <NUM> are examples of action sequences <NUM>; mitigation sequences <NUM> list user actions <NUM> that may be triggered through a user interface <NUM>, whereas action sequences <NUM> may list user actions <NUM> or internal tool actions <NUM> or both. An action sequence <NUM> includes one or more actions <NUM> or <NUM>. User action data <NUM> representing a user action <NUM> may include, e.g., interaction events such as clicks received, pages displayed, commands selected, input received through dialogs, and the like, extracted from raw data <NUM> such as logs or packets that are created automatically during tool usage sessions <NUM>. Internal action data <NUM> representing an internal tool action may include, e.g., automatic updates received, automatic culling of expired data, garbage collection or backups or other memory management actions, security handshakes or encryption protocol negotiations, communication retries, checksum calculations, and the like.

Some embodiments include a document synthesizer <NUM> that synthesizes documentation <NUM>. Although synthesized documentation <NUM> may be presented, e.g., in a web browser or a dialog or other familiar text or image presentation formats, of greater interest is the ability of some enhanced systems to synthesize documentation <NUM> that is contextualized to the user's current situation during a tool <NUM> usage session <NUM>. For example, the documentation <NUM> may present one or more mitigation sequences <NUM> that are specifically relevant to the current problem info <NUM>. Moreover, some synthesized documentation <NUM> may include mitigation URLs <NUM> or other interaction points that have mitigation functionality beyond the mere presentation of text or images to a user.

<FIG> illustrates several aspects <NUM> of enhanced systems <NUM> in addition to the aspects <NUM> shown in <FIG>. These items are discussed at various points herein, and additional details regarding them are provided in the discussion of a List of Reference Numerals later in this disclosure document.

<FIG> illustrates some examples of document synthesis models <NUM>. These items are discussed at various points herein, and additional details regarding them are provided in the discussion of a List of Reference Numerals later in this disclosure document.

<FIG> illustrates several aspects <NUM> of action metadata <NUM> in addition to the aspects <NUM> discussed in connection with <FIG>. These items are discussed at various points herein, and additional details regarding them are provided in the discussion of a List of Reference Numerals later in this disclosure document.

Some embodiments use or provide a functionality-enhanced system, such as system <NUM> or another system <NUM> that is enhanced as taught herein. In some embodiments, a system <NUM> configured for development tool user assistance includes a digital memory <NUM>, a processor <NUM>, and an interactive development tool <NUM> configured to operate using the digital memory and the processor. The development tool <NUM> has a user interface <NUM>. The processor <NUM> is in operable communication with the memory <NUM>. The processor is configured, e.g., with software <NUM>, to perform development tool user assistance steps which include (a) obtaining development problem information <NUM> from the development tool, (b) mapping the development problem information <NUM> to a problem matching node <NUM>, <NUM> in a mitigation graph <NUM> which has multiple nodes <NUM>, the mitigation graph nodes collectively representing actions <NUM> by users during development tool sessions <NUM>, the mitigation graph also containing action metadata <NUM> which indicates action cost <NUM> or action desirability <NUM> or both, (c) based at least in part on the problem matching node <NUM> and the action metadata <NUM>, identifying at least one action sequence <NUM> for mitigating the development problem, and (d) visually presenting the at least one action sequence <NUM> to a current user <NUM> of the development tool <NUM>.

In some embodiments, nodes <NUM> represent actions <NUM> taken by the user in the developer tool, with metadata <NUM> such as an indication <NUM> or <NUM> or <NUM> or <NUM> where an action originated from, an actual or estimated time <NUM> indicating how long an action took, an error code <NUM> or other outcome <NUM> indicating whether an operation was successful, and so on. In particular, in some embodiments the action metadata <NUM> in the mitigation graph <NUM> includes at least one of the following: an indication <NUM> that an action associated with the action metadata originated internally within the development tool without being caused directly by a user interface interaction, or an identification <NUM> of an error caused by an action associated with the action metadata after the action was taken during a non-current development tool session (possibly a different user's session).

Depending on the current node, or current popular workflows, some embodiments add or update or utilize one or more weights <NUM> associated with respective edges <NUM>, to inform the software <NUM> or the user <NUM> or both how likely <NUM> it is that a particular path <NUM> would be taken. This helps identify mitigation sequences <NUM>, as over time and usage the paths <NUM> that have better outcomes <NUM> will tend to be taken more often. Thus, in some embodiments the mitigation graph <NUM> includes a weight <NUM> on an edge between a first mitigation graph node <NUM> representing a first action <NUM> or <NUM> and a second mitigation graph node <NUM> representing a second action <NUM> or <NUM>, the weight representing a likelihood <NUM> that the first action and the second action will be performed consecutively, beginning with the first action.

In some embodiments, a productivity question or suggestion, or an error condition, occurring in the developer tool can automatically trigger a documentation server <NUM>, and automatically open a browser <NUM> with documentation <NUM> that is contextualized to describe the next steps or otherwise mitigate a current problem. In some, the computing system <NUM> includes a documentation server <NUM>, <NUM>, <NUM> which is configured to synthesize documentation <NUM> based at least in part on the problem matching node <NUM>, and format the synthesized documentation <NUM> for visual presentation <NUM> in the computing system. In some embodiments, interaction is facilitated by a bidirectional communication channel <NUM> between the documentation server <NUM>, <NUM> and the developer tool <NUM>.

In some embodiments, documentation <NUM> may describe a solution to a problem, or it may merely warn the user that particular problems may be present or are close, based on the actions <NUM> taken by the user and the internal tool state <NUM> and how they map to the graph <NUM>. In some embodiments, a graph node - or a sequence of graph nodes - may have an associated list <NUM> of possible problems <NUM>, and the listed problems may be ranked according to likelihood, or severity, or both.

Other system embodiments are also described herein, either directly or derivable as system versions of described processes or configured media, duly informed by the extensive discussion herein of computing hardware. Examples are provided in this disclosure to help illustrate aspects of the technology, but the examples given within this document do not describe all of the possible embodiments. An embodiment may depart from the examples. For instance, items shown in different Figures may be included together in an embodiment, items shown in a Figure may be omitted, functionality shown in different items may be combined into fewer items or into a single item, items may be renamed, or items may be connected differently to one another. A given embodiment may include or utilize additional or different data structures containing action metadata <NUM>, technical features, operational sequences, machine <NUM> configurations in an enhanced system <NUM>, security and user privacy protections, synthesizer <NUM> technologies, or user assistance functionalities for instance, and may otherwise depart from the examples provided herein.

<FIG> illustrates a family of methods <NUM> that may be performed or assisted by a given enhanced system, such as any system <NUM> example herein or another functionality <NUM> enhanced system as taught herein. <FIG> further illustrates development tool user assistance methods. <FIG> incorporates all steps shown in <FIG>. Methods <NUM> or <NUM> may also be referred to as development tool user assistance "processes" in the legal sense of the word "process".

Technical processes shown in the Figures or otherwise disclosed will be performed automatically, e.g., by an enhanced system <NUM> or software component thereof, unless otherwise indicated. Processes may also be performed in part automatically and in part manually to the extent activity by a human person is implicated. For example, in some embodiments a human may trigger operation of development tool user assistance functionality, e.g., by pressing a "help" button or saying "assist me". But no process contemplated as innovative herein is entirely manual.

In a given embodiment zero or more illustrated steps of a process may be repeated, perhaps with different parameters or data to operate on. Steps in an embodiment may also be done in a different order than the top-to-bottom order that is laid out in <FIG> and <FIG>. Steps may be performed serially, in a partially overlapping manner, or fully in parallel. In particular, the order in which flowchart <NUM> or flowchart <NUM> operation items are traversed to indicate the steps performed during a process may vary from one performance of the process to another performance of the process. The flowchart traversal order may also vary from one process embodiment to another process embodiment. Steps may also be omitted, combined, renamed, regrouped, be performed on one or more machines, or otherwise depart from the illustrated flow, provided that the process performed is operable and conforms to at least one claim.

Some embodiments use or provide a method for development tool user assistance, including automatically: obtaining <NUM> development problem information from a development tool; mapping <NUM> the development problem information to a problem matching node in a mitigation graph which has multiple nodes, the mitigation graph nodes collectively representing actions by users during development tool sessions, the mitigation graph also containing action metadata which indicates action cost or action desirability or both; synthesizing <NUM> documentation based at least in part on the problem matching node and the action metadata; and visually presenting <NUM> the synthesized documentation to a current user of the development tool.

Various kinds of document synthesis technology may be adapted for use in an enhanced system <NUM>, including machine learning (ML) technologies. Some embodiments utilize GPT-<NUM> or another autoregressive language model <NUM> for contextual text generation of documentation. More generally, in some embodiments, synthesizing <NUM> documentation <NUM> includes at least one of the following: executing <NUM> a machine learning model <NUM>, executing <NUM> an autoregressive language model <NUM>, executing <NUM> a Markov chain model <NUM>, or executing <NUM> a deep learning model <NUM>.

In some embodiments, the documentation <NUM> is interactive, in that it does not merely display information, it also presents actionable information which the user <NUM> can activate, e.g., by clicking on a mitigation URL <NUM> or other interaction point <NUM> within the documentation and thereby triggering the functionality <NUM> to instruct the tool to perform some action <NUM>. Documentation <NUM> may contain conventional hyperlinks that point to other documentation, but document display is not the only action triggerable by a mitigation URL <NUM>. A mitigation URL <NUM> activates actions <NUM> within the developer tool itself. A mitigation URL <NUM> may upon activation talk directly to the developer tool, and activate a GUI within the tool, execute a workflow or a collection of actions, or edit code or project assets, based on previous data collected for the tool, so the edits and actions can be tailored to the individual user and the current problem.

In some embodiments, an assistance method <NUM> includes noting <NUM> an activation <NUM> of a uniform resource locator <NUM> which is displayed within the synthesized documentation and in response to the activation performing at least one of the following document interaction sequences <NUM>: instructing <NUM> the development tool to automatically perform a sequence of development problem mitigation actions which alter <NUM> a development project digital data resource <NUM>, including at least one action <NUM> which is not a documentation display action; instructing <NUM> the development tool to automatically perform a sequence <NUM> of development problem mitigation actions without further input from the current user of the development tool, including at least one action <NUM> which is not a documentation display action; instructing <NUM> the development tool to automatically edit <NUM> a source code file <NUM>; instructing <NUM> the development tool to automatically edit <NUM> a development project file <NUM>; automatically installing <NUM> software; or automatically running <NUM> a build <NUM>.

In some embodiments, obtaining <NUM> development problem information <NUM> from the development tool includes obtaining at least one of the following: action metadata indicating an action origination <NUM>, action metadata indicating an action duration <NUM>, action metadata indicating an action outcome <NUM>, action metadata indicating an action visibility <NUM>, or action metadata indicating an action error code <NUM>.

In some embodiments and situations, the mitigation graph <NUM> is based entirely on actual user activity. But in other embodiments and situations, part of the graph <NUM> is generated from hypothetical actions that some user might take but has not yet apparently actually taken. In particular, some embodiments initialize <NUM> the mitigation graph with data <NUM> which is not generated from tracking <NUM> activity of the current user.

In some embodiments, the graph <NUM> links <NUM> contain metadata <NUM> describing a transition or trigger, e.g., a click <NUM>, or data <NUM> indicating an action occurred because of an error. In some, nodes <NUM> will contain information about a user action <NUM> taken, e.g., a fixed enum describing an operation, an indication whether it was a build operation, or an indication that a dialog showed up. If an error occurred, a node's metadata may also contain information about the error.

In some embodiments, obtaining <NUM> development problem information <NUM> from the development tool includes obtaining at least one of the following kinds of action metadata <NUM>: action metadata <NUM> indicating that an action included a click <NUM> as a user interface interaction, action metadata <NUM> indicating that an action resulted from a click <NUM> as a user interface interaction, action metadata <NUM> indicating that an action resulted from an error, action metadata <NUM> indicating that an action occurred as a build <NUM> operation, action metadata <NUM> indicating that an action resulted from a build <NUM> operation, action metadata <NUM> indicating that an action included a dialog <NUM> presentation, or action metadata <NUM> indicating that an action resulted from a dialog <NUM> presentation.

Some embodiments provide or utilize a graph administration tool <NUM>, which an authorized administrator can use to tweak the mitigation graph <NUM> in various ways, e.g., to sort or prioritize the graph-based action sequences before presenting options to the user. In particular, some embodiments include at least one of the following and then present <NUM> at least one development problem mitigation action to the current user: altering <NUM> metadata in the mitigation graph by operation of an administrative graph management tool <NUM> that is not available for use by the current user, removing <NUM> metadata from the mitigation graph by operation of an administrative graph management tool <NUM> that is not available for use by the current user, or receiving <NUM> metadata into the mitigation graph through an administrative graph management tool <NUM> that is not available for use by the current user.

Some embodiments include at least one of the following and then present <NUM> at least one development problem mitigation action to the current user: sorting <NUM> a plurality of development problem mitigation action sequences, or prioritizing <NUM> a development problem mitigation action sequence. For example, mitigation action sequences may be sorted according to computational cost <NUM>, number of user actions <NUM>, or popularity. A user who prefers a certain characteristic, e.g., fewer clicks, can also prioritize mitigation action sequences based on that characteristic.

In some embodiments and situations, the problem information may include data <NUM> or <NUM> that reveals or suggests personally identifiable information <NUM>, e.g., a user's full name, email address, work phone number, or the like. In some scenarios, such as those involving trade secret or classified or health information, details about a user's current work could also include or suggest PII <NUM>. Knowing which project or repository or file the user has open, for example, could narrow the scope of possible geographic locations of the user or the list of possible job titles of the user. Accordingly, some data may be anonymized, excluded, or otherwise constrained <NUM> from use as action metadata <NUM>. Network addresses may be hashed, and email addresses may be used as metadata <NUM> only internally within an organization, for example. Some embodiments anonymize, hash, or exclude personally identifiable information which is accessible to the development tool, thereby securing <NUM> the mitigation graph against inclusion of unprotected personally identifiable information.

As one of skill will appreciate from the present disclosure, functionality <NUM> may be particularly useful with tools <NUM> that are complex. One way to measure tool complexity is by the size of the interactive action sequences the functionality <NUM> provides in the synthesized documentation <NUM>. In some embodiments, the synthesized documentation includes a development problem mitigation uniform resource locator <NUM>, and the embodiment notes <NUM> an activation of the development problem mitigation uniform resource locator, and in response to the activation the embodiment automatically performs a sequence of development problem mitigation actions which includes at least three actions <NUM> that are not documentation display actions.

Some embodiments include a configured computer-readable storage medium <NUM>. Storage medium <NUM> may include disks (magnetic, optical, or otherwise), RAM, EEPROMS or other ROMs, and/or other configurable memory, including in particular computer-readable storage media (which are not mere propagated signals). The storage medium which is configured may be in particular a removable storage medium <NUM> such as a CD, DVD, or flash memory. A general-purpose memory, which may be removable or not, and may be volatile or not, can be configured into an embodiment using items such as assistant software <NUM>, action metadata <NUM>, a mitigation graph <NUM>, interactive synthesized documentation <NUM>, and a document synthesis model <NUM>, in the form of data <NUM> and instructions <NUM>, read from a removable storage medium <NUM> and/or another source such as a network connection, to form a configured storage medium. The configured storage medium <NUM> is capable of causing a computer system <NUM> to perform technical process steps for development tool user assistance through contextualized document synthesis, as disclosed herein. The Figures thus help illustrate configured storage media embodiments and process (a. method) embodiments, as well as system and process embodiments. In particular, any of the process steps illustrated in <FIG> or <FIG> or otherwise taught herein, may be used to help configure a storage medium to form a configured storage medium embodiment.

Some embodiments use or provide a computer-readable storage medium <NUM>, <NUM> configured with data <NUM> and instructions <NUM> which upon execution by at least one processor <NUM> cause a computing system to perform a method for development tool user assistance. This method includes: obtaining <NUM> development problem information <NUM> from a development tool <NUM>; mapping <NUM> the development problem information to a problem matching node <NUM>, <NUM> in a mitigation graph <NUM> which has multiple nodes <NUM>, the mitigation graph nodes collectively representing actions <NUM> by a set of users <NUM> and multiple development tool sessions <NUM>, the mitigation graph also containing action metadata <NUM> which indicates action cost <NUM> or action desirability <NUM> or both; selecting <NUM> a development problem mitigation action sequence <NUM> based on the action metadata; synthesizing <NUM> interactive contextual documentation <NUM> based at least in part on the problem matching node and the action metadata, the synthesized interactive contextual documentation including at least one interaction interface <NUM> for activation of the development problem mitigation action sequence; and visually presenting <NUM> the synthesized interactive contextual documentation to a current user of the development tool.

In some embodiments, the synthesized documentation <NUM> appears inside the development tool user interface <NUM>. That is, visually presenting <NUM> the synthesized interactive contextual documentation to a current user of the development tool includes displaying <NUM> the synthesized interactive contextual documentation inside a user interface <NUM> of the development tool. Some other embodiments display <NUM> the synthesized documentation inside a browser window that is outside the development tool <NUM>.

Some embodiments continually update <NUM> the graph <NUM> as the user operates the development tool. In particular, in some embodiments a method <NUM> includes repeatedly automatically and proactively updating <NUM> the mitigation graph <NUM> to represent recent interactions <NUM> of the development tool with the current user, as the current user interacts with the development tool over a period of at least ten minutes. Other periods than a ten minute period are used in some embodiments or some situations, but it is contemplated the time period used will be of a length permitting functionality <NUM> to capture <NUM> user telemetry <NUM> during most user sessions <NUM> for a given kind and configuration of development tool <NUM>.

Also, in some embodiments a method <NUM> includes repeatedly automatically and proactively updating <NUM> the mitigation graph <NUM> over a period of at least thirty minutes to represent internal actions <NUM> of the development tool which are not in a one-to-one correspondence with user interactions <NUM>. For example, some embodiments continually update the graph with internal actions of the development tool reflecting autocompletion database updates or other data cleaning, virus signature updates, garbage collection, checks for updates, polling, heartbeat, timeout, logging, and other internal tool state information. Other periods than a thirty minute period are used in some embodiments or some situations, but it is contemplated the time period used will be of a length permitting functionality <NUM> to capture <NUM> internal tool telemetry <NUM> during most user sessions <NUM> for a given kind and configuration of development tool <NUM>.

Some embodiments support a formal description of the mitigation graph which is used, e.g., to define initialization data <NUM> or guide use <NUM>, <NUM>, <NUM> of a graph administration tool <NUM>. In particular, in some embodiments updating <NUM> the mitigation graph includes processing <NUM> content written in a domain specific language <NUM>.

The technical character of embodiments described herein will be apparent to one of ordinary skill in the art, and will also be apparent in several ways to a wide range of attentive readers. Some embodiments address technical activities such as digitally obtaining <NUM> telemetry data <NUM>, <NUM>, computationally mapping <NUM> problem information <NUM> to one or more nodes <NUM> of a mitigation graph <NUM> data structure, computationally synthesizing <NUM> contextualized digital documentation <NUM>, computationally noting <NUM> an activation <NUM> in an enhanced computing system <NUM> of an interaction interface <NUM> and in response proactively performing <NUM> a mitigation sequence <NUM>, and updating <NUM> a mitigation graph <NUM> data structure, each of which is an activity deeply rooted in computing technology. Some of the technical mechanisms discussed include, e.g., document synthesis models <NUM>, bidirectional communication channels <NUM>, mapper software <NUM>, PII filters <NUM>, interaction interfaces <NUM>, assistance software <NUM>, and graph administration software <NUM>. Some of the technical effects discussed include, e.g., documentation <NUM> that is contextualized to a current user's particular problem, interactive contextualized documentation <NUM>, and reduction in user time and computational resources spent locating and searching through technical documentation that is not specific to a particular problem at hand. Thus, purely mental processes are clearly excluded. Other advantages based on the technical characteristics of the teachings will also be apparent to one of skill from the description provided.

One of skill will recognize that not every part of this disclosure, or any particular details therein, are necessarily required to satisfy legal criteria such as enablement, written description, or best mode. Any apparent conflict with any other patent disclosure, even from the owner of the present innovations, has no role in interpreting the claims presented in this patent disclosure. With this understanding, which pertains to all parts of the present disclosure, some additional examples and observations are offered.

Some embodiments include a local documentation server subsystem <NUM>. This can include a local HTTP or HTTPS server <NUM>, which hosts the documentation <NUM>. The server can run on a port such as port <NUM>. A user can access the documentation locally from any installed browser <NUM>. A local browser can be automatically be opened on the HTTP server URL, on a request from the system, on an error condition, or when help is requested from the developer tool for which the documentation system is implemented.

Some embodiments include a documentation service <NUM> hosted in a cloud and widely accessible. The service is responsible for communicating with the developer tool <NUM> and the documentation server <NUM>. This service is where information <NUM> from the developer tool, across all users <NUM>, is collected. The service <NUM> maintains a graph database <NUM>, e.g., using an Azure Cosmos DB® SaaS or similar technology, which stores all the nodes <NUM> and edges <NUM>, with associated metadata <NUM> (mark of Microsoft Corporation). The service <NUM> is responsible for data collection <NUM>, <NUM> from the developer tool, for analysis <NUM>, <NUM>, of the data, and for documentation synthesis <NUM>.

In some embodiments, the developer tool <NUM> is the central tool which a developer <NUM> or an engineer <NUM> interacts with, and for which documentation <NUM> is provided. Some of the many possible examples of the developer tool <NUM> which may be part of an enhanced system <NUM> are an IDE, a CAD tool, a compiler, or another developer or engineering tool with a complex interface and multiple workflows.

In some embodiments, code and frequently used call sites in the developer tool <NUM> are instrumented manually or automatically, such that as a user interfaces with the developer tool, the instrumented code emits the data <NUM> onto the documentation service <NUM>. As the developer tool is used, the graph database <NUM> in the documentation service keeps updating <NUM>. Nodes <NUM> represent actions <NUM> taken by the user in the developer tool, with metadata <NUM> about where it originated from, how long it took, was the operation successful, did the action have a GUI or ran internally, if the operation failed, what was the cause of the error, etc. This graph <NUM> is also accessible for manual edits <NUM>, <NUM>, <NUM>, e.g., one may insert new nodes and add or refine the metadata describing an operation.

In the graph <NUM>, there will be a finite number of transitions and connections between the code, and it will be possible to predict possible new actions a user might take. Depending on the current node, or current popular workflows, an embodiment may include a weight on the edges, to inform a path selector <NUM> how likely it is that a given path <NUM> might be taken.

Developer tools <NUM> are often complex, permitting many ways <NUM> of attacking a given problem <NUM>. There may be many options or knobs to turn on or off, even while there are limited ways the tool can be configured. With enough rich information <NUM> stored in the graph <NUM>, an embodiment can track issues in the developer tool, and observe how users have unblocked or continued in their workflow after error conditions. An admin may also update the graph manually, to add a new workflow or adjust a way of using the tool. Based on usage patterns, an embodiment may instruct users about the next path to take, in view of the current state of the tool. The embodiment may guide a user to or along a path to success, allowing the user to avoid the frustration of looking through irrelevant documentation in the hope of finding the relevant parts, thus significantly improving productivity compared with systems that are limited to static non-contextual documentation.

In some embodiments, as issues or patterns emerge for any specific user, the embodiment is also able to make productivity suggestions that take a user on a better path. In conjunction with a productivity suggestion, or an error condition, the enhanced developer tool can automatically trigger <NUM> the documentation server, and open a browser with documentation that will be contextual and describe the next steps or otherwise mitigate the current problem. When documentation is presented in the system, it may be formatted <NUM> in HTML, and it may contain text, images, and hyperlinks. In static documentation systems, hyperlinks link to other documentation. This may also be done in an enhanced system but in addition the hyperlinks can be interactive points <NUM> that activate various actions <NUM> within the developer tool itself. An interaction point <NUM> can communicate directly with the enhanced developer tool, e.g., to activate a GUI within the tool, execute a workflow or a collection of actions, or edit code or other project assets, based on previous data collected for the tool, so the edits and actions can be tailored to an individual user. The interaction is facilitated by bidirectional communication <NUM> between the documentation server and the developer tool, e.g., via packets, remote procedure calls, scripts, XML, JSON, or other mechanisms. This interaction may be viewed as including an automatic generation of a user-tailored interactive blog post, which is contextual, containing images and actions.

In some embodiments, the documentation actions and images can be synthesized using a machine learning model. A model like GPT-<NUM> could be utilized for contextual text generation from existing documentation. Images can be synthesized by using an automation interface to the tool to replay actions and record them. Actions on the links may be manually or automatically tagged within the tool. The text may be synthesized by creating textual descriptions in a database, with various keywords, and then combining it based on relevance.

In some embodiments, an Overview documentation page is presented <NUM> inside the tool in a GUI, for example as a docked document in a tabbed system. This Overview page contains contextual information and documentation, actualized using current context and details from a project system such as an IDE. The documentation is also interactive and interacting with it will interact with the IDE, thus not only providing information, but also providing actions through the documentation. A user may interface using text, buttons and hyperlinks, whereon the document <NUM> communicates directly with the IDE and a loaded project, including altering state in the project's resources.

In some embodiments the content <NUM> loaded is contextual and can branch out and self-actualize without visible refresh in place, depending on the user's actions. The content and action triggers <NUM> for the content or sections of the content can also update from the internet, and be used for communicating issues as users encounter them, thus directing users to workarounds that, once initiated, can be self-applying. The documentation system being interactive allows the user, through the documentation system, to not merely read documentation, but to actually execute actions <NUM>, <NUM> through the documentation and thereby fix problems or explore mitigation options.

Some embodiments include intelligence gathering. Every action <NUM> performed by a user in the tool is tagged and recorded on a central place, and a mitigation graph <NUM> of such actions is built and maintained centrally for all tracked users. Each action is tagged and correlated with additional semantic metadata. The tool is modified to generate such data, e.g., by the authors of the tool who know which code corresponds to what actions. Some user actions that consume user input, e.g., as configuration files or code, will also be classified with their intelligence <NUM> uploaded as metadata to the actions.

In some embodiments, a subgraph of actions provides a basis from which the embodiment synthesizes textual documentation. References to documentation and tagging on how the tool works can be maintained in a database, and then automatically be combined by the system, based on the tags and actions. Machine learning may be employed for combining such information, and to synthesize the textual documentation.

When another user encounters a problem or needs help, the documentation system can tap into the central intelligence graph <NUM>, and when given a current live graph <NUM> for the current user, it can map to what branches <NUM> other users have taken, and expose the intelligence to the current user as synthesized documentation <NUM>.

Some embodiments perform retention analysis, such that users' intentions are observed, and weights are associated to actions that are problematic in a tool or need more attention.

One embodiment may be utilized as part of a Linux® software development experience (mark of Linus Torvalds). Suppose an IDE overview page is open and no projects are loaded. The overview page may contain text explaining general details of cross platform programming, e.g., a development project may target environments involving Linux®, CMake®, Windows®, Clang tools, etc. (marks of Linus Torvalds, Kitware, Inc. , Microsoft Corporation, respectively). Once a Linux MSBuild project is created, the text content of the page expands with more text saying, e.g., "The Linux® experience allows development for Linux® environments etc. Use SSH to target Linux. For compilation use g++, gcc ,etc. For debugging use gdb and gdbserver. For copying use rsync or sftp.

Tools such as g++ and gcc are invokable by hyperlinks <NUM>. If a machine <NUM> is detected as one configured into the project, the embodiment will check whether the tools are installed on it, and reflect the result as yes/no using green or red. If the hyperlink <NUM> shows as red and tools are not installed then embodiment does not show any more content or info about the non-present features. If users click on a red hyperlink <NUM>, the embodiment will install the tools, and show as green. Then the embodiment appends content <NUM> explaining the remaining features and details.

Some embodiments described herein may be viewed by some people in a broader context. For instance, concepts such as community, connection, difficulty, help, or knowledge may be deemed relevant to a particular embodiment. However, it does not follow from the availability of a broad context that exclusive rights are being sought herein for abstract ideas; they are not. Rather, the present disclosure is focused on providing appropriately specific embodiments whose technical effects fully or partially solve particular technical problems, such as how to present documentation that is relevant to a particular problem encountered by a user of a development tool. Other configured storage media, systems, and processes involving community, connection, difficulty, help, or knowledge are outside the present scope. Accordingly, vagueness, mere abstractness, lack of technical character, and accompanying proof problems are also avoided under a proper understanding of the present disclosure.

Any of these combinations of code, data structures, logic, components, communications, and/or their functional equivalents may also be combined with any of the systems and their variations described above. A process may include any steps described herein in any subset or combination or sequence which is operable. Each variant may occur alone, or in combination with any one or more of the other variants. Each variant may occur with any of the processes and each process may be combined with any one or more of the other processes. Each process or combination of processes, including variants, may be combined with any of the configured storage medium combinations and variants described above.

More generally, one of skill will recognize that not every part of this disclosure, or any particular details therein, are necessarily required to satisfy legal criteria such as enablement, written description, or best mode. Also, embodiments are not limited to the particular motivating examples and scenarios, operating environments, problems <NUM>, architectures, metadata <NUM> examples, development tool <NUM> examples, document relevance examples, software processes, identifiers, data structures, data formats, notations, control flows, naming conventions, or other implementation choices described herein. Any apparent conflict with any other patent disclosure, even from the owner of the present innovations, has no role in interpreting the claims presented in this patent disclosure.

Some acronyms, abbreviations, names, and symbols are defined below. Others are defined elsewhere herein, or do not require definition here in order to be understood by one of skill.

Portions of this disclosure contain or discuss URLs, hyperlinks, IP addresses, and/or other items which might be considered browser-executable codes. These items are included in the disclosure for their own sake to help describe some embodiments, rather than being included to reference the contents of the web sites or files that they identify. Applicants do not intend to have these URLs, hyperlinks, IP addresses, or other such codes be active links. None of these items are intended to serve as an incorporation by reference of material that is located outside this disclosure document. Thus, there should be no objection to the inclusion of these items herein. To the extent these items are not already disabled, it is presumed the Patent Office will disable them (render them inactive as links) when preparing this document's text to be loaded onto its official web database. See, e.g., United States Patent and Trademark Manual of Patent Examining Procedure §<NUM>(VII).

Reference is made herein to exemplary embodiments such as those illustrated in the drawings, and specific language is used herein to describe the same. But alterations and further modifications of the features illustrated herein, and additional technical applications of the abstract principles illustrated by particular embodiments herein, which would occur to one skilled in the relevant art(s) and having possession of this disclosure, should be considered within the scope of the claims.

The meaning of terms is clarified in this disclosure, so the claims should be read with careful attention to these clarifications. Specific examples are given, but those of skill in the relevant art(s) will understand that other examples may also fall within the meaning of the terms used, and within the scope of one or more claims. Terms do not necessarily have the same meaning here that they have in general usage (particularly in non-technical usage), or in the usage of a particular industry, or in a particular dictionary or set of dictionaries. Reference numerals may be used with various phrasings, to help show the breadth of a term. Omission of a reference numeral from a given piece of text does not necessarily mean that the content of a Figure is not being discussed by the text. The inventors assert and exercise the right to specific and chosen lexicography. Quoted terms are being defined explicitly, but a term may also be defined implicitly without using quotation marks. Terms may be defined, either explicitly or implicitly, here in the Detailed Description and/or elsewhere in the application file.

As used herein, a "computer system" (a. "computing system") may include, for example, one or more servers, motherboards, processing nodes, laptops, tablets, personal computers (portable or not), personal digital assistants, smartphones, smartwatches, smartbands, cell or mobile phones, other mobile devices having at least a processor and a memory, video game systems, augmented reality systems, holographic projection systems, televisions, wearable computing systems, and/or other device(s) providing one or more processors controlled at least in part by instructions. The instructions may be in the form of firmware or other software in memory and/or specialized circuitry.

A "multithreaded" computer system is a computer system which supports multiple execution threads. The term "thread" should be understood to include code capable of or subject to scheduling, and possibly to synchronization. A thread may also be known outside this disclosure by another name, such as "task," "process," or "coroutine," for example. However, a distinction is made herein between threads and processes, in that a thread defines an execution path inside a process. Also, threads of a process share a given address space, whereas different processes have different respective address spaces. The threads of a process may run in parallel, in sequence, or in a combination of parallel execution and sequential execution (e.g., time-sliced).

A "processor" is a thread-processing unit, such as a core in a simultaneous multithreading implementation. A processor includes hardware. A given chip may hold one or more processors. Processors may be general purpose, or they may be tailored for specific uses such as vector processing, graphics processing, signal processing, floating-point arithmetic processing, encryption, I/O processing, machine learning, and so on.

"Kernels" include operating systems, hypervisors, virtual machines, BIOS or UEFI code, and similar hardware interface software.

"Code" means processor instructions, data (which includes constants, variables, and data structures), or both instructions and data. "Code" and "software" are used interchangeably herein. Executable code, interpreted code, and firmware are some examples of code.

"Program" is used broadly herein, to include applications, kernels, drivers, interrupt handlers, firmware, state machines, libraries, and other code written by programmers (who are also referred to as developers) and/or automatically generated.

A "routine" is a callable piece of code which normally returns control to an instruction just after the point in a program execution at which the routine was called.

Depending on the terminology used, a distinction is sometimes made elsewhere between a "function" and a "procedure": a function normally returns a value, while a procedure does not. As used herein, "routine" includes both functions and procedures. A routine may have code that returns a value (e.g., sin(x)) or it may simply return without also providing a value (e.g., void functions).

"Service" means a consumable program offering, in a cloud computing environment or other network or computing system environment, which provides resources to multiple programs or provides resource access to multiple programs, or does both. User assistance proxies may be implemented with services or accessed via services, for example.

"Cloud" means pooled resources for computing, storage, and networking which are elastically available for measured on-demand service. A cloud may be private, public, community, or a hybrid, and cloud services may be offered in the form of infrastructure as a service (IaaS), platform as a service (PaaS), software as a service (SaaS), or another service. Unless stated otherwise, any discussion of reading from a file or writing to a file includes reading/writing a local file or reading/writing over a network, which may be a cloud network or other network, or doing both (local and networked read/write).

"Access" to a computational resource includes use of a permission or other capability to read, modify, write, execute, or otherwise utilize the resource. Attempted access may be explicitly distinguished from actual access, but "access" without the "attempted" qualifier includes both attempted access and access actually performed or provided.

As used herein, "include" allows additional elements (i.e., includes means comprises) unless otherwise stated.

"Optimize" means to improve, not necessarily to perfect. For example, it may be possible to make further improvements in a program or an algorithm which has been optimized.

"Process" is sometimes used herein as a term of the computing science arts, and in that technical sense encompasses computational resource users, which may also include or be referred to as coroutines, threads, tasks, interrupt handlers, application processes, kernel processes, procedures, or object methods, for example. As a practical matter, a "process" is the computational entity identified by system utilities such as Windows® Task Manager, Linux® ps, or similar utilities in other operating system environments (marks of Microsoft Corporation, Linus Torvalds, respectively). "Process" is also used herein as a patent law term of art, e.g., in describing a process claim as opposed to a system claim or an article of manufacture (configured storage medium) claim. Similarly, "method" is used herein at times as a technical term in the computing science arts (a kind of "routine") and also as a patent law term of art (a "process"). "Process" and "method" in the patent law sense are used interchangeably herein. Those of skill will understand which meaning is intended in a particular instance, and will also understand that a given claimed process or method (in the patent law sense) may sometimes be implemented using one or more processes or methods (in the computing science sense).

"Automatically" means by use of automation (e.g., general purpose computing hardware configured by software for specific operations and technical effects discussed herein), as opposed to without automation. In particular, steps performed "automatically" are not performed by hand on paper or in a person's mind, although they may be initiated by a human person or guided interactively by a human person. Automatic steps are performed with a machine in order to obtain one or more technical effects that would not be realized without the technical interactions thus provided. Steps performed automatically are presumed to include at least one operation performed proactively.

One of skill understands that technical effects are the presumptive purpose of a technical embodiment. The mere fact that calculation is involved in an embodiment, for example, and that some calculations can also be performed without technical components (e.g., by paper and pencil, or even as mental steps) does not remove the presence of the technical effects or alter the concrete and technical nature of the embodiment. Development tool user assistance operations such as tracking <NUM> user actions <NUM> and internal tool actions <NUM>, executing <NUM> machine learning models <NUM>, displaying <NUM> documentation, installing <NUM> software, editing <NUM> digital resources <NUM>, altering <NUM> mitigation graph <NUM> data structures, and many other operations discussed herein, are understood to be inherently digital. A human mind cannot interface directly with a CPU or other processor, or with RAM or other digital storage, to read and write the necessary data to perform the development tool user assistance steps taught herein. This would all be well understood by persons of skill in the art in view of the present disclosure.

"Computationally" likewise means a computing device (processor plus memory, at least) is being used, and excludes obtaining a result by mere human thought or mere human action alone. For example, doing arithmetic with a paper and pencil is not doing arithmetic computationally as understood herein. Computational results are faster, broader, deeper, more accurate, more consistent, more comprehensive, and/or otherwise provide technical effects that are beyond the scope of human performance alone. "Computational steps" are steps performed computationally. Neither "automatically" nor "computationally" necessarily means "immediately". "Computationally" and "automatically" are used interchangeably herein.

"Proactively" means without a direct request from a user. Indeed, a user may not even realize that a proactive step by an embodiment was possible until a result of the step has been presented to the user. Except as otherwise stated, any computational and/or automatic step described herein may also be done proactively.

Throughout this document, use of the optional plural "(s)", "(es)", or "(ies)" means that one or more of the indicated features is present. For example, "processor(s)" means "one or more processors" or equivalently "at least one processor".

For the purposes of United States law and practice, use of the word "step" herein, in the claims or elsewhere, is not intended to invoke means-plus-function, step-plus-function, or <NUM> United State Code Section <NUM> Sixth Paragraph / Section <NUM>(f) claim interpretation. Any presumption to that effect is hereby explicitly rebutted.

For the purposes of United States law and practice, the claims are not intended to invoke means-plus-function interpretation unless they use the phrase "means for". Claim language intended to be interpreted as means-plus-function language, if any, will expressly recite that intention by using the phrase "means for". When means-plus-function interpretation applies, whether by use of "means for" and/or by a court's legal construction of claim language, the means recited in the specification for a given noun or a given verb should be understood to be linked to the claim language and linked together herein by virtue of any of the following: appearance within the same block in a block diagram of the figures, denotation by the same or a similar name, denotation by the same reference numeral, a functional relationship depicted in any of the figures, a functional relationship noted in the present disclosure's text. For example, if a claim limitation recited a "zac widget" and that claim limitation became subject to means-plus-function interpretation, then at a minimum all structures identified anywhere in the specification in any figure block, paragraph, or example mentioning "zac widget", or tied together by any reference numeral assigned to a zac widget, or disclosed as having a functional relationship with the structure or operation of a zac widget, would be deemed part of the structures identified in the application for zac widgets and would help define the set of equivalents for zac widget structures.

One of skill will recognize that this innovation disclosure discusses various data values and data structures, and recognize that such items reside in a memory (RAM, disk, etc.), thereby configuring the memory. One of skill will also recognize that this innovation disclosure discusses various algorithmic steps which are to be embodied in executable code in a given implementation, and that such code also resides in memory, and that it effectively configures any general purpose processor which executes it, thereby transforming it from a general purpose processor to a special-purpose processor which is functionally special-purpose hardware.

Accordingly, one of skill would not make the mistake of treating as nonoverlapping items (a) a memory recited in a claim, and (b) a data structure or data value or code recited in the claim. Data structures and data values and code are understood to reside in memory, even when a claim does not explicitly recite that residency for each and every data structure or data value or piece of code mentioned. Accordingly, explicit recitals of such residency are not required. However, they are also not prohibited, and one or two select recitals may be present for emphasis, without thereby excluding all the other data values and data structures and code from residency. Likewise, code functionality recited in a claim is understood to configure a processor, regardless of whether that configuring quality is explicitly recited in the claim.

Throughout this document, unless expressly stated otherwise any reference to a step in a process presumes that the step may be performed directly by a party of interest and/or performed indirectly by the party through intervening mechanisms and/or intervening entities, and still lie within the scope of the step. That is, direct performance of the step by the party of interest is not required unless direct performance is an expressly stated requirement. For example, a step involving action by a party of interest such as altering, editing, executing, formatting, identifying, initializing, installing, instructing, mapping, noting, obtaining, performing, presenting, processing, receiving, running, sorting, synthesizing, tracking, updating (and alters, altered, edits, edited, etc.) with regard to a destination or other subject may involve intervening action such as the foregoing or forwarding, copying, uploading, downloading, encoding, decoding, compressing, decompressing, encrypting, decrypting, authenticating, invoking, and so on by some other party, including any action recited in this document, yet still be understood as being performed directly by the party of interest.

Whenever reference is made to data or instructions, it is understood that these items configure a computer-readable memory and/or computer-readable storage medium, thereby transforming it to a particular article, as opposed to simply existing on paper, in a person's mind, or as a mere signal being propagated on a wire, for example. For the purposes of patent protection in the United States, a memory or other computer-readable storage medium is not a propagating signal or a carrier wave or mere energy outside the scope of patentable subject matter under United States Patent and Trademark Office (USPTO) interpretation of the In re Nuijten case. No claim covers a signal per se or mere energy in the United States, and any claim interpretation that asserts otherwise in view of the present disclosure is unreasonable on its face. Unless expressly stated otherwise in a claim granted outside the United States, a claim does not cover a signal per se or mere energy.

Moreover, notwithstanding anything apparently to the contrary elsewhere herein, a clear distinction is to be understood between (a) computer readable storage media and computer readable memory, on the one hand, and (b) transmission media, also referred to as signal media, on the other hand. A transmission medium is a propagating signal or a carrier wave computer readable medium. By contrast, computer readable storage media and computer readable memory are not propagating signal or carrier wave computer readable media. Unless expressly stated otherwise in the claim, "computer readable medium" means a computer readable storage medium, not a propagating signal per se and not mere energy.

An "embodiment" herein is an example. The term "embodiment" is not interchangeable with "the invention". Embodiments may freely share or borrow aspects to create other embodiments (provided the result is operable), even if a resulting combination of aspects is not explicitly described per se herein. Requiring each and every permitted combination to be explicitly and individually described is unnecessary for one of skill in the art, and would be contrary to policies which recognize that patent specifications are written for readers who are skilled in the art. Formal combinatorial calculations and informal common intuition regarding the number of possible combinations arising from even a small number of combinable features will also indicate that a large number of aspect combinations exist for the aspects described herein. Accordingly, requiring an explicit recitation of each and every combination would be contrary to policies calling for patent specifications to be concise and for readers to be knowledgeable in the technical fields concerned.

The following list is provided for convenience and in support of the drawing figures and as part of the text of the specification, which describe innovations by reference to multiple items. Items not listed here may nonetheless be part of a given embodiment. For better legibility of the text, a given reference number is recited near some, but not all, recitations of the referenced item in the text. The same reference number may be used with reference to different examples or different instances of a given item. The list of reference numerals is:.

In short, the teachings herein provide a variety of development tool user assistance functionality functionalities <NUM> which operate in enhanced systems <NUM>. Some embodiments track <NUM> internal actions <NUM> of a development tool <NUM>, and actions <NUM> of a user <NUM> of the tool's GUI <NUM>. When the user faces a problem <NUM> while using the tool <NUM>, information <NUM> about the problem state (e.g., recent user actions <NUM> and internal actions <NUM>) is matched <NUM> to a node <NUM>, <NUM> in a mitigation graph <NUM>; the mitigation graph <NUM> was built <NUM> from other user's sessions <NUM> with the tool <NUM>. Then documentation <NUM> which is contextualized to the current problem <NUM> is synthesized <NUM>, e.g., using machine learning models <NUM> or other document synthesis models <NUM> such as snippet assembly. The synthesized documentation <NUM> is presented <NUM> or <NUM> to the user, with mitigation sequence <NUM> content relevant (i.e., contextualized) to the current problem info <NUM>. In addition to text and images, the documentation <NUM> may include interaction points <NUM> such as hyperlinks <NUM> or buttons associated with code that mitigates <NUM> the problem <NUM>. For example, a mitigation sequence <NUM> may proactively instruct <NUM> the tool <NUM> to perform <NUM> certain actions <NUM> such as an install <NUM> or build <NUM> or undo, or may automatically operate <NUM> the tool user interface <NUM> proactively in place of the user <NUM>. Mitigation sequences <NUM>, <NUM> may be sorted <NUM>, and may be subjected to cost <NUM> or outcome desirability <NUM> prioritization <NUM>. An administration tool <NUM> may provide mitigation graph <NUM> management functionality for administrative users. Personally identifiable information <NUM> presence is constrained <NUM>, e.g., by filters <NUM>.

Embodiments are understood to also themselves include or benefit from tested and appropriate security controls and privacy controls such as the General Data Protection Regulation (GDPR). Use of the tools and techniques taught herein is compatible with use of such controls.

Although Microsoft technology is used in some motivating examples, the teachings herein are not limited to use in technology supplied or administered by Microsoft. Under a suitable license, for example, the present teachings could be embodied in software or services provided by other vendors.

Although particular embodiments are expressly illustrated and described herein as processes, as configured storage media, or as systems, it will be appreciated that discussion of one type of embodiment also generally extends to other embodiment types. For instance, the descriptions of processes in connection with <FIG> and <FIG> also help describe configured storage media, and help describe the technical effects and operation of systems and manufactures like those discussed in connection with other Figures. It does not follow that limitations from one embodiment are necessarily read into another. In particular, processes are not necessarily limited to the data structures and arrangements presented while discussing systems or manufactures such as configured memories.

Those of skill will understand that implementation details may pertain to specific code, such as specific thresholds or ranges, specific architectures, specific attributes, and specific computing environments, and thus need not appear in every embodiment. Those of skill will also understand that program identifiers and some other terminology used in discussing details are implementation-specific and thus need not pertain to every embodiment. Nonetheless, although they are not necessarily required to be present here, such details may help some readers by providing context and/or may illustrate a few of the many possible implementations of the technology discussed herein.

With due attention to the items provided herein, including technical processes, technical effects, technical mechanisms, and technical details which are illustrative but not comprehensive of all claimed or claimable embodiments, one of skill will understand that the present disclosure and the embodiments described herein are not directed to subject matter outside the technical arts, or to any idea of itself such as a principal or original cause or motive, or to a mere result per se, or to a mental process or mental steps, or to a business method or prevalent economic practice, or to a mere method of organizing human activities, or to a law of nature per se, or to a naturally occurring thing or process, or to a living thing or part of a living thing, or to a mathematical formula per se, or to isolated software per se, or to a merely conventional computer, or to anything wholly imperceptible or any abstract idea per se, or to insignificant post-solution activities, or to any method implemented entirely on an unspecified apparatus, or to any method that fails to produce results that are useful and concrete, or to any preemption of all fields of usage, or to any other subject matter which is ineligible for patent protection under the laws of the jurisdiction in which such protection is sought or is being licensed or enforced.

Reference herein to an embodiment having some feature X and reference elsewhere herein to an embodiment having some feature Y does not exclude from this disclosure embodiments which have both feature X and feature Y, unless such exclusion is expressly stated herein. All possible negative claim limitations are within the scope of this disclosure, in the sense that any feature which is stated to be part of an embodiment may also be expressly removed from inclusion in another embodiment, even if that specific exclusion is not given in any example herein. The term "embodiment" is merely used herein as a more convenient form of "process, system, article of manufacture, configured computer readable storage medium, and/or other example of the teachings herein as applied in a manner consistent with applicable law. " Accordingly, a given "embodiment" may include any combination of features disclosed herein, provided the embodiment is consistent with at least one claim.

Not every item shown in the Figures need be present in every embodiment. Conversely, an embodiment may contain item(s) not shown expressly in the Figures. Although some possibilities are illustrated here in text and drawings by specific examples, embodiments may depart from these examples. For instance, specific technical effects or technical features of an example may be omitted, renamed, grouped differently, repeated, instantiated in hardware and/or software differently, or be a mix of effects or features appearing in two or more of the examples. Functionality shown at one location may also be provided at a different location in some embodiments; one of skill recognizes that functionality modules can be defined in various ways in a given implementation without necessarily omitting desired technical effects from the collection of interacting modules viewed as a whole. Distinct steps may be shown together in a single box in the Figures, due to space limitations or for convenience, but nonetheless be separately performable, e.g., one may be performed without the other in a given performance of a method.

Reference has been made to the figures throughout by reference numerals. Any apparent inconsistencies in the phrasing associated with a given reference numeral, in the figures or in the text, should be understood as simply broadening the scope of what is referenced by that numeral. Different instances of a given reference numeral may refer to different embodiments, even though the same reference numeral is used. Similarly, a given reference numeral may be used to refer to a verb, a noun, and/or to corresponding instances of each, e.g., a processor <NUM> may process <NUM> instructions by executing them.

As used herein, terms such as "a", "an", and "the" are inclusive of one or more of the indicated item or step. In particular, in the claims a reference to an item generally means at least one such item is present and a reference to a step means at least one instance of the step is performed. Similarly, "is" and other singular verb forms should be understood to encompass the possibility of "are" and other plural forms, when context permits, to avoid grammatical errors or misunderstandings.

Headings are for convenience only; information on a given topic may be found outside the section whose heading indicates that topic.

All claims and the abstract, as filed, are part of the specification.

To the extent any term used herein implicates or otherwise refers to an industry standard, and to the extent that applicable law requires identification of a particular version of such as standard, this disclosure shall be understood to refer to the most recent version of that standard which has been published in at least draft form (final form takes precedence if more recent) as of the earliest priority date of the present disclosure under applicable patent law.

While exemplary embodiments have been shown in the drawings and described above, it will be apparent to those of ordinary skill in the art that numerous modifications can be made without departing from the principles and concepts set forth in the claims, and that such modifications need not encompass an entire abstract concept. Although the subject matter is described in language specific to structural features and/or procedural acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific technical features or acts described above the claims. It is not necessary for every means or aspect or technical effect identified in a given definition or example to be present or to be utilized in every embodiment. Rather, the specific features and acts and effects described are disclosed as examples for consideration when implementing the claims.

Claim 1:
A computing system (<NUM>) configured for development tool user assistance, the system comprising:
a digital memory (<NUM>);
a processor (<NUM>) in operable communication with the digital memory;
a development tool (<NUM>) configured to operate using the digital memory and the processor; and
wherein the processor is configured to perform development tool user assistance steps which include (a) obtaining (<NUM>) development problem information (<NUM>) comprising metadata values (<NUM>) for a current user at a particular point in the current development tool (<NUM>) usage session and a full or partial history of interactions of the current user and/or internal development tool actions (<NUM>) from the development tool, (b) mapping (<NUM>) the development problem information to a problem matching node (<NUM>, <NUM>) in a mitigation graph (<NUM>) which has multiple nodes (<NUM>), the mitigation graph nodes collectively representing interactions (<NUM>) with a user interface of the development tool by other users during other development tool sessions (<NUM>), the mitigation graph also containing action metadata (<NUM>) which indicates action cost (<NUM>) or action desirability (<NUM>) or both, (c) based at least in part on the problem matching node and the action metadata, identifying (<NUM>) at least one action sequence (<NUM>) for mitigating the development problem (<NUM>), and (d) visually presenting (<NUM>) the at least one action sequence to a current user of the development tool.