| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Upgrade agentic workflows to gh-aw v0.92.0 (#69896) * Upgrade agentic workflows to gh-aw v0.92.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Require complete quarantine analysis before no-op Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Pulse publication compatibility Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> | 14 天前 | |
Clarify API review timing and add authoring skill (#68959) * Clarify API approval as an RTM requirement * Add API review issue authoring skill * Refine API review issue format * Address API review process feedback | 1 个月前 | |
Add validated Known Build Error support to test quarantine (#69039) * Capture the real error signature in new quarantine issues Quarantine issues recorded the agent's prose description of a failure rather than the failure itself. That text is not matchable, and the Azure DevOps build it came from ages out of public retention, so within a few weeks the issue is the only surviving record of the failure and it no longer contains the actual error. Anyone picking the test up later has nothing precise to work from. The collector already fetched errorMessage and stackTrace per test to build the agent prompt, so the data was always present; only the paraphrasing destroyed it. It now derives an Arcade Known Issue payload from that same text and the agent pastes it verbatim instead of describing it. The signature is a literal substring of the real errorMessage. Volatile fragments (ports, GUIDs, timings, addresses, paths, counters) are located and the longest contiguous stable run between them is taken; fragments are never stitched together, because Arcade matches with String.Contains and a stitched string would never match anything. When no trustworthy signature can be derived the payload is omitted and the reason recorded, rather than emitting one that would match half the repository. ExcludeConsoleLog is set because one xunit console log is shared by every test in a Helix work item, so including it attributes unrelated failures to the issue. The section uses the "### Known Issue Error Message" heading to avoid colliding with the template's human-readable "## Error Message" prose. The "Known Build Error" label is deliberately not applied. A Known Build Error means a failure still blocks other people's builds, and a quarantined test no longer blocks anything. Registering these is a separate human decision; this change only prepares a valid payload. The marker embeds a sha256 prefix of the ErrorMessage so any consumer can detect paraphrasing or truncation without access to the originating run. This detects mangling, not forgery, and the tests demonstrate that boundary. Tests extract the derivation from the workflow between sentinel comments and execute it, so they exercise the shipped code rather than a copy. They include an independent reproduction of the signature a human hand-wrote for the real Known Build Error on dotnet/aspnetcore#68708. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Create validated KBEs for quarantined tests Generate quarantine issues through a deterministic safe-output handler that validates runtime-style matchers against captured test evidence and gates Build Insights enrollment. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Bind quarantine KBEs to deterministic eligibility Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Align quarantine output limits with gh-aw Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Harden quarantine KBE eligibility Track assembly-level quarantine removals across project history, fail closed on ambiguous source associations, and cover renamed or inherited test layouts. Enforce a single custom issue call and use deterministic exact-title issue reuse. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Add quarantine workflow regression checks Run quarantine fixtures in isolated pull request CI, document ordered substring matching, and fail clearly when RUNNER_TEMP is missing or empty. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Track quarantine history across partial test types Resolve partial inherited runners within their project and apply logical type quarantine history only to methods and runners present at the transition. Preserve method-scoped freshness, cover the regression cases, and bound historical indexing work. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Validate historical inheritance and runner identity Resolve inherited tests against the chain present at quarantine transitions, including historical-only intermediates. Reject cross-project runner ambiguity before direct matches and preserve method-scoped freshness policy. Add red/green regression coverage and document identity limits. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 * Clarify quarantine eligibility documentation Explain the collector's responsibilities and use descriptive new-quarantine and re-quarantine terminology while preserving receipt identifiers and workflow behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 --------- Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Copilot-Session: d5905c51-843f-4d8c-9852-cbbcf77d7723 | 1 个月前 | |
Add an agent skill for porting browser APIs to Components.Platform (#69829) * Restore the port-components-platform-api skill It was removed from the Platform PR to be reviewed in a separate PR. * Revise the port-components-platform-api skill based on the Platform PR review Drop the adoption of existing framework IJSRuntime callers, and add the rules settled in review for disposal, reference acquisition, cancellation, testing, and Helix E2E runs. Make the description easier for agents to match. * Update the port-components-platform-api skill to match the reviewed Web Storage code Fix the outdated disposal rule, add the XML documentation rules, register new types in both PublicApiTest checks, and record why the API stays one-to-one and returns ValueTask. * Require member-level trimming and no JS module in the port-components-platform-api skill * Add design, type mapping, and trimming rules to the port-components-platform-api skill Rework the skill so that an agent can port any browser API family with fewer wrong guesses. Cookie Store is used only as an example. The rules come from a design study of Cookie Store on top of the Web Storage review. Workflow and scope - Add a "Design first" step. The agent reads Web IDL from webref, lists every type and member as implement, defer, or exclude, checks browser support per member, and collects open questions before any code is written. - Defer events and other callbacks from JavaScript, such as onchange, and raise them with the reviewers. - Stop and ask when a member is not Baseline, because there is no diagnostic ID for [Experimental] yet. - Move the adoption rules into Scope and Design first, and drop the Adopt section. - Make the description match requests such as "wrap the X API as a .NET API". Public API shape - Split the old Implement section into "Shape the public API" and "Implement". - Follow review-public-api/references/conventions.md where Web IDL does not decide, and let this skill win on a conflict. - Keep the family a synchronous extension property, even when the browser object can be missing. A null reference fails with NotSupportedException. - Leave value checks to the browser. Check only null arguments, not the members of a dictionary. Type mapping (new references/type-mapping.md) - Keep Web IDL type names in .NET casing, and raise name collisions. - Map typedefs to the type behind them, numbers to plain number types, and sequences to IReadOnlyList<T> or IEnumerable<T>. - Map dictionaries to sealed classes, not records. Passed dictionaries use get/set, returned ones use init and nullable members. - Choose each member shape from its Web IDL default, so that null never reaches the browser where it would become the string "null". - Map enums with JsonStringEnumConverter<T> and JsonStringEnumMemberName. - Map an optional dictionary parameter to an overload without it. Trimming - Put DynamicDependency on methods that pass a dictionary to JS interop, because JS interop arguments are not trim-annotated and a lost member gives no warning. - Verify every dictionary member in a trimmed WebAssembly app. Documentation and tests - Document NotSupportedException and test a null reference when the browser object can be missing. * Explain the disposal decision and its scope in the port-components-platform-api skill - Record the two designs that the API proposal review rejected. A public IAsyncDisposable let one caller break a shared wrapper, and an explicit implementation still let await using compile. - Limit the internal disposal rule to shared wrappers that Window hands out. Disposal of objects that a call creates for the caller is not designed yet, so the agent stops and raises it. * Refer to the review-public-api skill by name instead of a path outside the skill * Fix the CookieStoreManager example and nested types in the trimming rules - Define the inventory by the entry point of the family, and give the right reason to exclude CookieStoreManager. It is exposed to Window too, but only through ServiceWorkerRegistration.cookies. - The trimming annotation on TValue does not reach collection elements or property types. Require DynamicDependency with JsonSerialized for every dictionary type that is not TValue itself, in both directions. * Base Cookie Store overloads on the method steps, not only on Web IDL - The type mapping said that get({}) returns the first cookie, and it used GetAsync() as the example of an overload without options. Both were wrong. The method steps of get(options) reject empty options with TypeError, so get(), get({}), and get(null) always fail. Edge confirms this. - Web IDL requires optional and = {} on a final dictionary parameter without required members, so the default does not mean that empty options work. Require reading the method steps before adding an overload without the options, and use getAll, which accepts empty options, as the example. * Require unit tests that assert the serialized JSON of dictionary arguments - The unit tests of Web Storage use a mock of IJSRuntime, which records the .NET arguments before serialization. That is enough for strings and numbers, but not for dictionaries. A missing JsonIgnore sends "path":null, and the browser creates a cookie whose path is the string "null". The mock records the same CookieInit instance either way, so the test still passes. - A test runtime that derives from JSRuntime receives the real ArgsJson in BeginInvokeJS. A sketch of the Cookie Store port confirmed that it shows the omitted members and the enum strings as the browser receives them. - Trimming can still drop members without a warning, so the trimmed WebAssembly check stays as a separate step. * Explain when an ambiguous null overload call matters - The rule used GetAllAsync(null) and told callers who need it to write GetAllAsync(default(string)). No caller needs it in Cookie Store. Both parameters are non-nullable, so null throws ArgumentNullException anyway. - The rule still matters when null is a valid value. Web IDL allows an overload with a nullable type next to one with an interface type, such as foo(DOMString? value) and foo(Bar bar), and JavaScript foo(null) calls the first one. In .NET, Foo(null) does not compile, and the caller has to give the type. Use that case as the example, and keep the rule not to add a workaround. * Leave out null members that have a null default - The type mapping said that T? x = null needs no attribute, because the specification treats null and a missing member the same. The E2E tests of the Cookie Store port showed that Chromium crashes the page on cookieStore.set({ maxAge: null }). The unit tests could not show it, because they never reach a browser. - Leaving such a member out when it is null changes nothing for a browser that follows the specification, and it avoids this kind of bug. Require JsonIgnore with WhenWritingNull on these members too, and update the CookieInit example. * Pass JS interop arguments in params form - Storage mixes two forms. InvokeAsync uses a collection expression, such as InvokeAsync<string?>("getItem", [key]), while InvokeVoidAsync uses params, such as InvokeVoidAsync("setItem", key, value). Both reach JavaScript the same way, and the mix came from the first prototype without a reason. - In the shipping code of the repository, about 20 calls use params, and only the two in Storage use a collection expression. The project template WebWorkerClient writes [method, args, timeoutMs] on purpose, because args is an array that params would expand. - Follow that pattern. Use params by default, and write [...] only when an argument is an array, null, a TimeSpan, or a CancellationToken, which an overload or params would take for something else. * Add an eval for the port-components-platform-api skill * Place families on their Web IDL owner and detect missing objects - The rule put every family on Window. Clipboard is navigator.clipboard in Web IDL, so the rule would make Window.Clipboard. Keep the Web IDL owner and reach it through synchronous properties, such as Window.Navigator.Clipboard, and stop when the owner type does not exist yet. Make an attribute a synchronous property only when it returns the same interface object for the life of the page and reading it has no side effect. Every other attribute stays Get<X>Async(). - The rule said that GetValueAsync returns a null reference when the browser object is missing. It throws JSException when the property is not defined, such as cookieStore on an insecure page, and returns null only when the property holds null or undefined. A minimal Blazor app confirmed both. Translate the JSException from the acquisition to NotSupportedException too, and cover it in the unit tests. - NotSupportedException is still only proposed in the Cookie Store API proposal, so raise it as an open question until API review approves it. * Explain why a reference that arrives after disposal is not released - Disposal does not wait for a pending acquisition, so a reference that arrives later is never released. The rule did not say so, and a review of the Cookie Store port flagged it as a leak. - State that this is accepted, and why. It happens only when the scope ends during an acquisition and leaves at most one reference for each family, while waiting could hold up the end of the circuit for a minute. | 12 天前 | |
Treat pending-ci-rerun as a merge gate and dotnet-policy-service as a bot (#69653) The pending-ci-rerun label is an inactivity marker applied by policy automation, not evidence that CI is running. Stop routing every labeled PR to WaitingOnCI ahead of review state. Instead, record ci-rerun-pending as an informational reason on every labeled classification and only hold an otherwise ReadyToMerge PR in WaitingOnCI until CI is rerun. Add dotnet-policy-service to knownBotPatterns so its boilerplate comments no longer require non-author discussion verification or count as human community responses. Complete bot-only discussion evidence now yields no-response. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> | 26 天前 | |
[ASP.NET] Add review-public-api Copilot skill (#67335) Adds a .github/skills/review-public-api skill that reviews a proposed public API for this repo the way the @dotnet/aspnet-api-review team would: it produces a verdict, a need assessment (commonality and target audience), per-type bullet changes, and a diff against the existing repo API surface. The skill is split into SKILL.md plus three reference docs covering the review process, the conventions the API review team applies, and the expected output format. Also adds a Vally eval for the skill and a generic skills-vs-baseline experiment that A/B tests any skill with a Vally eval against a no-skill baseline. These are run manually, not in CI. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7088f3cc-6dc3-446b-9a4f-a1d420a4f53a | 3 个月前 | |
Bound PR review inputs for native readers (#70058) * Bound PR review inputs for native readers Project frozen GitHub metadata, externalize multiline required text with verified source references, and scope worker input consumption by role. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Harden prepared review transport tests Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Clarify per-guide worker skill loading Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Isolate per-guide review inputs Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Align hosted worker assignment dispatch Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Align review workers with native reads Require exact assigned file reads through native tools, prohibit worker shell use, and retain source-root-scoped native search. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> | 3 天前 | |
[Blazor] Fix cascading parameter hot reload caching (#68885) * Fix cascading parameter hot reload caching Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Add Hot Reload implementation guidance Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Generalize Hot Reload skill guidance Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Fix Hot Reload test indentation Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> | 1 个月前 | |
Require Selenium for browser-owned Components regressions (#69064) * Require Selenium for browser-owned Components regressions Document the permanent regression boundary, align the interactive validation skill handoff, and add focused Vally coverage for browser and lower-boundary test selection. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Harden Components test policy evals Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Generalize deterministic Components E2E workflow Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Refine Components regression workflow Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Copilot-Session: e2b46a36-410e-48dc-8ce7-cf07dab0bc96 | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 12 天前 | ||
| 26 天前 | ||
| 3 个月前 | ||
| 3 天前 | ||
| 1 个月前 | ||
| 1 个月前 |