@microsoft/sarif-multitool-darwin 5.0.2 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/Sarif.Driver.pdb CHANGED
Binary file
package/Sarif.Multitool CHANGED
Binary file
Binary file
@@ -6,156 +6,88 @@
6
6
  <members>
7
7
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddInvocationCommand">
8
8
  <summary>
9
- Implements <c>multitool add-invocation</c>: appends a fully-formed SARIF invocation
9
+ Implements <c>add-invocation</c>: appends a fully-formed SARIF invocation
10
10
  JSON to <c>&lt;output&gt;.wip.jsonl</c>.
11
11
  </summary>
12
12
  <remarks>
13
- <para>The verb performs no schema validation on the invocation payload beyond "must be
14
- a JSON object" — SARIF §3.20 makes every field on <c>Invocation</c> optional, and AI
15
- producers vary widely in which fields they have meaningful values for (a daemon may
16
- know its <c>startTimeUtc</c> but not its <c>exitCode</c>; a one-shot scanner may know
17
- both). Full-log validation belongs in <c>emit-finalize --validate</c>, not at receipt.</para>
18
- <para>Invocations are replayed in event order to <c>run.invocations[]</c>. Subsequent
19
- <c>execution-notification</c> and <c>configuration-notification</c> events attach to
20
- the most recent invocation, so emitting a fresh invocation event MAY be used to start
21
- a new notification group within the same scan.</para>
13
+ <para>The verb gates required AI invocation fields: <c>executionSuccessful</c>,
14
+ <c>commandLine</c>, <c>workingDirectory.uri</c>, and inline notification <c>timeUtc</c>
15
+ values. Full structural validation runs at <c>emit-finalize --validate</c>.</para>
16
+ <para>The verb stamps <c>endTimeUtc</c> with the time of receipt when the producer leaves it unset.</para>
22
17
  </remarks>
23
18
  </member>
24
19
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddInvocationOptions">
25
20
  <summary>
26
21
  Options for <c>add-invocation</c>, which appends a fully-formed SARIF <c>invocation</c>
27
22
  object to a staged event log (<c>&lt;output&gt;.wip.jsonl</c>) created by
28
- <c>emit-init-run</c>.
23
+ <c>emit-run</c>.
29
24
  </summary>
30
25
  <remarks>
31
- The invocation is supplied as a JSON document (file via <c>--input</c> or piped on
32
- stdin). <see cref="!:SarifEventReplayer"/> strips any <c>invocations</c> array carried on
33
- the run header — invocations must arrive as their own events — so this verb is the
34
- only path a producer has to populate <c>run.invocations[]</c>. Subsequent
35
- <c>add-notification</c> events attach to the most recent invocation in event order,
36
- so producers MAY append additional invocations to start a new notification group
37
- (e.g., to model a re-run within the same scan).
26
+ The invocation is supplied as a JSON document (file via <c>--input</c> or piped on stdin).
27
+ Notifications travel inline on <c>toolExecutionNotifications</c> /
28
+ <c>toolConfigurationNotifications</c>.
38
29
  </remarks>
39
30
  </member>
40
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddNotificationCommand">
31
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddNotificationReportingDescriptorCommand">
41
32
  <summary>
42
- Implements <c>multitool add-notification</c>: appends a fully-formed SARIF notification
43
- JSON to <c>&lt;output&gt;.wip.jsonl</c>.
33
+ Implements <c>add-notification-reporting-descriptor</c>: validates a SARIF
34
+ reportingDescriptor JSON and appends it to <c>run.tool.driver.notifications[]</c> in a
35
+ staged event log.
44
36
  </summary>
45
- <remarks>
46
- <para>Unlike <see cref="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddResultCommand"/>, this verb does not enforce the AI ruleId
47
- convention on the notification's <c>associatedRule.id</c> — that field references a
48
- descriptor in <c>tool.driver.rules</c>, which uses the base taxonomy id (e.g.,
49
- <c>CWE-79</c>) per SARIF §3.49.3, not the result-side hierarchical form.</para>
50
- <para>Notifications without a <c>timeUtc</c> stamp are auto-stamped at replay time
51
- (<see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventReplayer"/>), so producers can omit that field without firing
52
- AI2019 at validate time.</para>
53
- </remarks>
54
37
  </member>
55
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddNotificationOptions">
38
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddNotificationReportingDescriptorOptions">
56
39
  <summary>
57
- Options for <c>add-notification</c>, which appends a fully-formed SARIF <c>notification</c>
58
- object to a staged event log (<c>&lt;output&gt;.wip.jsonl</c>) created by
59
- <c>emit-init-run</c>.
40
+ Options for <c>add-notification-reporting-descriptor</c>, which appends a SARIF
41
+ <c>reportingDescriptor</c> to <c>run.tool.driver.notifications[]</c> in a staged event log
42
+ (<c>&lt;output&gt;.wip.jsonl</c>) created by <c>emit-run</c>.
60
43
  </summary>
61
44
  <remarks>
62
- The notification is supplied as a JSON document (file via <c>--input</c> or piped on
63
- stdin). AI producers are expected to emit notifications with potentially very rich data
64
- — associated rule references, full exception trees, descriptive markdown messages,
65
- per-call properties — so the JSON-payload contract avoids encoding-by-flag entirely and
66
- preserves whatever the producer chose to express.
45
+ The descriptor is supplied as a JSON document (file via <c>--input</c> or piped on stdin).
46
+ Each <c>id</c> may appear at most once in the notifications array.
67
47
  </remarks>
68
48
  </member>
69
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddReportingDescriptorCommand">
49
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddResultCommand">
70
50
  <summary>
71
- Implements <c>multitool add-reporting-descriptor</c>: validates a fully-formed SARIF
72
- reportingDescriptor JSON and appends an event to <c>&lt;output&gt;.wip.jsonl</c>.
51
+ Implements <c>add-result</c>: validates a fully-formed SARIF result JSON and
52
+ appends a <c>result</c> event to <c>&lt;output&gt;.wip.jsonl</c>.
73
53
  </summary>
74
54
  <remarks>
75
- <para>Default target is <c>run.tool.driver.notifications[]</c>; pass <c>--rules</c> to
76
- target <c>run.tool.driver.rules[]</c> instead.</para>
77
- <para>On the <c>--rules</c> path, the descriptor id is gated against
78
- <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsNovel(System.String)"/>: only NOVEL- prefixed ids are accepted.
79
- Taxonomy-mapped rule descriptors (e.g., <c>CWE-89</c>) come from the taxonomy enricher
80
- at finalize time, not from this verb — this verb is the producer-side authoring path
81
- for novel-finding descriptors that have no upstream taxonomy entry.</para>
82
- <para>Duplicate-id submissions within the same event log are rejected on receipt — the
83
- verb scans the existing event log (including any descriptors pre-populated on the
84
- run-header event) and fails before appending. (A future <c>--force</c> escape hatch
85
- is acknowledged; not in v1.)</para>
55
+ The result's <c>ruleId</c> is validated at receipt against the AI ruleId convention
56
+ (taxonomy sub-id form or NOVEL- escape hatch). On rejection the verb writes the
57
+ AI-consumable error envelope (error code AI-RULEID-001) to stderr and returns
58
+ <see cref="F:Microsoft.CodeAnalysis.Sarif.Driver.CommandBase.FAILURE"/> WITHOUT appending an AI orchestrator can retry the
59
+ individual result without first having to remove garbage from the event log.
86
60
  </remarks>
87
61
  </member>
88
- <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.AddReportingDescriptorCommand.TryFindDuplicate(System.String,System.String,System.String,System.String,System.String@)">
62
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddResultOptions">
89
63
  <summary>
90
- Scans the staged event log for a prior descriptor with the same id targeting the
91
- same array. Returns <c>true</c> with <paramref name="error"/> populated when a
92
- duplicate is found; <c>false</c> otherwise.
64
+ Options for <c>add-result</c>, which appends a fully-formed SARIF <c>result</c> object
65
+ to a staged event log (<c>&lt;output&gt;.wip.jsonl</c>) created by <c>emit-run</c>.
93
66
  </summary>
94
67
  <remarks>
95
- Two sources are checked:
96
- <list type="bullet">
97
- <item><description>Run-header events: <c>payload.tool.driver.&lt;targetArray&gt;[*].id</c>
98
- — producers MAY pre-populate descriptors on the header.</description></item>
99
- <item><description>Prior descriptor events of the same target kind:
100
- <c>payload.id</c>.</description></item>
101
- </list>
102
- The reader silently skips unknown kinds and malformed-but-skippable rows; for the
103
- scan we walk the full event sequence so the event index reported in the error
104
- matches the producer's mental model of "the Nth thing I appended."
68
+ The result is supplied as a JSON document (file via <c>--input</c> or piped on stdin).
69
+ On receipt the verb validates <c>result.ruleId</c> against the AI ruleId convention.
105
70
  </remarks>
106
71
  </member>
107
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddReportingDescriptorOptions">
72
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddRuleReportingDescriptorCommand">
108
73
  <summary>
109
- Options for <c>add-reporting-descriptor</c>, which appends a fully-formed SARIF
110
- <c>reportingDescriptor</c> object to a staged event log
111
- (<c>&lt;output&gt;.wip.jsonl</c>) created by <c>emit-init-run</c>.
74
+ Implements <c>add-rule-reporting-descriptor</c>: validates a SARIF
75
+ reportingDescriptor JSON with a <c>NOVEL-</c> id and appends it to
76
+ <c>run.tool.driver.rules[]</c> in a staged event log.
112
77
  </summary>
113
- <remarks>
114
- <para>The verb's default target is <c>run.tool.driver.notifications[]</c> — AI producers
115
- routinely emit notification descriptors (progress, telemetry, config errors, handoff
116
- breadcrumbs). Pass <c>--rules</c> to target <c>run.tool.driver.rules[]</c> instead;
117
- this rule-descriptor path is reserved for NOVEL- novel-finding descriptors (taxonomy
118
- rule descriptors such as <c>CWE-89</c> come from the taxonomy enricher, not this
119
- verb).</para>
120
- <para>The descriptor is supplied as a JSON document (file via <c>--input</c> or piped
121
- on stdin). The full SARIF reportingDescriptor shape (id, name, shortDescription,
122
- fullDescription, helpUri, messageStrings, defaultConfiguration, properties, …)
123
- round-trips byte-for-byte through the staged event log.</para>
124
- <para>Each descriptor <c>id</c> may appear at most once per event log. Submitting a
125
- duplicate id is rejected with a clear error pointing at the prior occurrence.</para>
126
- </remarks>
127
78
  </member>
128
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddResultCommand">
79
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddRuleReportingDescriptorOptions">
129
80
  <summary>
130
- Implements <c>multitool add-result</c>: validates a fully-formed SARIF result JSON and
131
- appends a <c>result</c> event to <c>&lt;output&gt;.wip.jsonl</c>.
81
+ Options for <c>add-rule-reporting-descriptor</c>, which appends a SARIF
82
+ <c>reportingDescriptor</c> to <c>run.tool.driver.rules[]</c> in a staged event log
83
+ (<c>&lt;output&gt;.wip.jsonl</c>) created by <c>emit-run</c>.
132
84
  </summary>
133
85
  <remarks>
134
- The result's <c>ruleId</c> is validated at receipt against the AI ruleId convention
135
- (taxonomy sub-id form or NOVEL- escape hatch). On rejection the verb writes the
136
- AI-consumable error envelope (error code AI-RULEID-001) to stderr and returns
137
- <see cref="F:Microsoft.CodeAnalysis.Sarif.Driver.CommandBase.FAILURE"/> WITHOUT appending — an AI orchestrator can retry the
138
- individual result without first having to remove garbage from the event log.
86
+ Reserved for novel-finding rules: the descriptor <c>id</c> must be a well-formed
87
+ <c>NOVEL-</c> id. Descriptors for taxonomy-mapped rules (e.g., <c>CWE-89</c>) come from the
88
+ taxonomy enricher, not this verb. Each <c>id</c> may appear at most once in the rules array.
139
89
  </remarks>
140
90
  </member>
141
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AddResultOptions">
142
- <summary>
143
- Options for <c>add-result</c>, which appends a fully-formed SARIF <c>result</c> object
144
- to a staged event log (<c>&lt;output&gt;.wip.jsonl</c>) created by <c>emit-init-run</c>.
145
- </summary>
146
- <remarks>
147
- The result is supplied as a JSON document (file via <c>--input</c> or piped on stdin).
148
- The SARIF <c>result</c> object can carry rich nested structures (code flows, thread flows,
149
- stacks, fixes, taxa, related locations, properties bags). Modeling every field as a CLI
150
- flag would explode the surface; the JSON-payload contract keeps the verb generic and lets
151
- an AI producer emit arbitrarily-rich findings without losing fidelity.
152
-
153
- On receipt the verb validates that <c>result.ruleId</c> conforms to the AI ruleId
154
- convention (taxonomy sub-id form or NOVEL- escape hatch) so an AI orchestrator gets an
155
- immediate, AI-consumable rejection envelope rather than discovering the violation later
156
- at <c>emit-finalize</c> time.
157
- </remarks>
158
- </member>
159
91
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext">
160
92
  <summary>
161
93
  Detects an Azure DevOps pipeline execution context from environment variables and stamps
@@ -216,7 +148,7 @@
216
148
  </summary>
217
149
  <remarks>
218
150
  <para>The "stamp only when absent, fail on conflict" contract is required because
219
- callers (notably <c>emit-init-run</c>'s JSON-payload contract) may supply these
151
+ callers (notably <c>emit-run</c>'s JSON-payload contract) may supply these
220
152
  fields directly. An unconditional overwrite would silently clobber a producer's
221
153
  declared identity; a conflict is a misconfiguration signal that we want to surface
222
154
  at the verb rather than ship in the run.</para>
@@ -261,15 +193,15 @@
261
193
  </member>
262
194
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitEventLogHelpers">
263
195
  <summary>
264
- Shared plumbing for the emit verb chain (<c>emit-init-run</c>, <c>add-result</c>,
265
- <c>add-notification</c>, <c>emit-finalize</c>): resolves the staged event log path,
266
- reads caller-supplied JSON (file or stdin), and parses it into a
267
- <see cref="T:Newtonsoft.Json.Linq.JToken"/> in a date-safe way.
196
+ Shared plumbing for the emit verb chain (<c>emit-run</c>, <c>add-result</c>,
197
+ <c>add-invocation</c>, <c>add-notification-reporting-descriptor</c>,
198
+ <c>add-rule-reporting-descriptor</c>, <c>emit-finalize</c>): resolves
199
+ the staged event log path, reads caller-supplied JSON (file or stdin), and parses it into
200
+ a <see cref="T:Newtonsoft.Json.Linq.JToken"/> in a date-safe way.
268
201
  </summary>
269
202
  <remarks>
270
- The verbs share three concerns locating <c>&lt;output&gt;.wip.jsonl</c>, sourcing
271
- the payload, and parsing it without lossy normalization — which live here so the
272
- per-verb commands can stay focused on payload-specific validation and append.
203
+ Shared helpers preserve payload text, including date-looking strings, until the staged
204
+ event log is finalized.
273
205
  </remarks>
274
206
  </member>
275
207
  <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitEventLogHelpers.TryValidateUri(System.String,System.String,System.String[],System.String@)">
@@ -278,12 +210,8 @@
278
210
  absolute URI whose scheme appears in <paramref name="allowedSchemes"/>.
279
211
  </summary>
280
212
  <remarks>
281
- Returning <c>true</c> when the value is empty preserves the "flag is optional"
282
- contract only supplied URIs are validated. We require an absolute URI (relative
283
- values would never resolve meaningfully into a SARIF reader downstream) and we
284
- constrain the scheme to a documented allow-list so a typo like <c>"htps://..."</c>
285
- or an inappropriate scheme like <c>"file:..."</c> on a public-facing URL surfaces
286
- here rather than silently shipping in the run header.
213
+ Empty values are accepted because the corresponding flags are optional. Non-empty
214
+ values must be absolute and use an allowed scheme.
287
215
  </remarks>
288
216
  </member>
289
217
  <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitEventLogHelpers.TryResolveWipPath(System.String,Microsoft.CodeAnalysis.Sarif.IFileSystem,System.String@)">
@@ -312,18 +240,13 @@
312
240
  </member>
313
241
  <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitEventLogHelpers.ReadStandardInputAsUtf8">
314
242
  <summary>
315
- Reads redirected stdin as UTF-8, bypassing <see cref="P:System.Console.InputEncoding"/>.
316
- On Windows the console's default input encoding is the active OEM codepage
317
- (often cp437 or cp850), which would mangle non-ASCII content in a piped
318
- SARIF payload. AI orchestrators routinely emit messages, URIs, and properties
319
- containing non-ASCII characters, so we must decode the raw byte stream as UTF-8
320
- regardless of the console's current code page. A BOM-stamped input is still
321
- honored — <see cref="T:System.IO.StreamReader"/>'s detect-BOM flag handles that case.
243
+ Reads redirected stdin as UTF-8, bypassing <see cref="P:System.Console.InputEncoding"/> so
244
+ Windows OEM codepages cannot mangle non-ASCII SARIF payloads. A UTF-8 BOM is honored.
322
245
  </summary>
323
246
  </member>
324
247
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitFinalizeCommand">
325
248
  <summary>
326
- Implements <c>multitool emit-finalize</c>: replays <c>&lt;output&gt;.wip.jsonl</c>,
249
+ Implements <c>emit-finalize</c>: replays <c>&lt;output&gt;.wip.jsonl</c>,
327
250
  optionally enriches CWE-as-rule-id descriptors, and atomically writes the destination
328
251
  SARIF file.
329
252
  </summary>
@@ -341,15 +264,41 @@
341
264
  writes the destination SARIF file.
342
265
  </summary>
343
266
  </member>
344
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand">
267
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitFinalizeRebaseVisitor">
268
+ <summary>
269
+ Rewrites absolute local file paths in a run into relative URIs plus portable, per-repository
270
+ <c>uriBaseId</c>s derived from <c>versionControlProvenance</c>. Each artifact location is
271
+ resolved against the run's input <c>originalUriBaseIds</c>, attributed to the owning
272
+ repository by longest-prefix match on the mapped local root, and re-expressed relative to
273
+ that repository's minted output base. The rebuilt <c>originalUriBaseIds</c> anchor each base
274
+ at a portable root — a GitHub-compatible blob permalink (commit-pinned in the URL) or an Azure
275
+ DevOps repository root (commit pinning carried by <c>versionControlProvenance.revisionId</c>),
276
+ derived from the repositoryUri by <see cref="T:Microsoft.CodeAnalysis.Sarif.Multitool.VcpPortableRoot"/> — so the finalized SARIF
277
+ carries no machine-specific path.
278
+ </summary>
279
+ <remarks>
280
+ One repository collapses to the bare <c>SRCROOT</c> base. Multiple repositories each receive
281
+ <c>SRCROOT_&lt;REPO-LEAF&gt;</c>, disambiguated by an ordinal suffix on collision. A result URI
282
+ that resolves to a local file path under no declared repository root fails finalize (it would
283
+ leak); an unmatched URI under a portable scheme is inlined as an absolute reference.
284
+ </remarks>
285
+ </member>
286
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInputOptionsBase">
287
+ <summary>
288
+ Shared options for the emit verbs that append a JSON object to a staged event log: the
289
+ destination SARIF path and the JSON input (file or stdin).
290
+ </summary>
291
+ </member>
292
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand">
345
293
  <summary>
346
- Implements <c>multitool emit-init-run</c>: creates an append-only SARIF event log
294
+ Implements <c>emit-run</c>: creates an append-only SARIF event log
347
295
  (<c>&lt;output&gt;.wip.jsonl</c>) seeded with a <c>run-header</c> event built from a
348
296
  caller-supplied SARIF <c>Run</c> JSON document (file via <c>--input</c> or stdin).
349
297
  </summary>
350
298
  <remarks>
351
299
  <para>The JSON-payload contract matches the other emit verbs (<c>add-result</c>,
352
- <c>add-notification</c>, <c>add-reporting-descriptor</c>). The supplied <c>Run</c> may
300
+ <c>add-invocation</c>, <c>add-notification-reporting-descriptor</c>,
301
+ <c>add-rule-reporting-descriptor</c>). The supplied <c>Run</c> may
353
302
  carry any subset of the partial-Run shape the replayer accepts (<c>tool</c>,
354
303
  <c>language</c>, <c>columnKind</c>, <c>defaultEncoding</c>, <c>defaultSourceLanguage</c>,
355
304
  <c>originalUriBaseIds</c>, <c>versionControlProvenance</c>, <c>automationDetails</c>,
@@ -385,92 +334,53 @@
385
334
  </list>
386
335
  </remarks>
387
336
  </member>
388
- <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.TryRequireOptionalObject(Newtonsoft.Json.Linq.JObject,System.String,Newtonsoft.Json.Linq.JObject@)">
337
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.TryValidateVcpRepositoryShapes(Newtonsoft.Json.Linq.JObject)">
389
338
  <summary>
390
- If <paramref name="parent"/> carries a token at <paramref name="key"/>, requires it to
391
- be a JSON object and returns it via <paramref name="value"/>. Returns true when the key
392
- is absent (or explicitly null) without surfacing an error; returns false with a clear
393
- AI-consumable diagnostic when the key is present but the wrong shape (e.g.
394
- <c>"tool": "x"</c>). Walking parent shapes up front prevents JValue indexer accesses
395
- further down the validator chain from throwing InvalidOperationException.
339
+ Confirms that every present <c>versionControlProvenance[].repositoryUri</c> has a shape
340
+ from which <see cref="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitFinalizeRebaseVisitor"/> can later derive a portable root. Runs
341
+ after header validation (which proves each value is an absolute https URI) and after env
342
+ stamping, so both caller-supplied and stamped entries are covered. Entries without a
343
+ repositoryUri are left to the finalize-time contract.
396
344
  </summary>
397
345
  </member>
398
- <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.TryStampAdoContext(Newtonsoft.Json.Linq.JObject,Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext,System.String@)">
346
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.TryRequireOptionalObject(Newtonsoft.Json.Linq.JObject,System.String,Newtonsoft.Json.Linq.JObject@)">
399
347
  <summary>
400
- Stamps ADO pipeline identity directly onto the JSON payload. Mutating the JObject
401
- rather than round-tripping through the typed <see cref="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.Run(Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunOptions,Microsoft.CodeAnalysis.Sarif.IFileSystem)"/> model preserves any
402
- SARIF Run fields the typed model doesn't surface (e.g., <c>redactionTokens</c>) in
403
- the wip line. (The replayer materializes a typed <c>Run</c> at finalize time, so
404
- non-typed fields are durable only up to that boundary.)
348
+ Requires an optional token to be null/absent or a JSON object; returns the object via
349
+ <paramref name="value"/>.
405
350
  </summary>
406
351
  </member>
407
- <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.TryStampVcp(Newtonsoft.Json.Linq.JObject,System.Uri,System.String,System.String,System.String@)">
352
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.TryStampAdoContext(Newtonsoft.Json.Linq.JObject,Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext,System.String@)">
408
353
  <summary>
409
- Enriches <c>versionControlProvenance</c> on the JSON payload with the resolved
410
- repository URI / revision id / branch ref fields (sourced from the pipeline
411
- environment via <see cref="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.TryResolveVcpFields(Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext,Microsoft.CodeAnalysis.Sarif.Multitool.GitHubActionsContext,System.Uri@,System.String@,System.String@,System.String@)"/>). Three input shapes:
412
- <list type="bullet">
413
- <item>VCP absent or empty array → append a synthesized entry with the fields we have
414
- (only when a repository URI is known; branch/revision without a repo URI anchor is
415
- informationally thin and cannot bind to a repo downstream).</item>
416
- <item>VCP contains exactly one entry → enrich missing fields; fail on disagreement.</item>
417
- <item>VCP contains multiple entries → leave untouched (caller declared a multi-repo
418
- shape; we don't pick which entry names the pipeline's source repo).</item>
419
- </list>
420
- <para>This method is the env-driven stamper. The verb supports a layered set of
421
- VCP sources:</para>
422
- <list type="number">
423
- <item>ADO pipeline environment — <c>TF_BUILD=True</c> plus the
424
- <c>BUILD_REPOSITORY_URI</c> / <c>BUILD_SOURCEVERSION</c> /
425
- <c>BUILD_SOURCEBRANCH</c> vars supply repo URI / revision / branch directly.</item>
426
- <item>GitHub Actions environment — <c>GITHUB_ACTIONS=true</c> plus
427
- <c>GITHUB_SERVER_URL</c> / <c>GITHUB_REPOSITORY</c> / <c>GITHUB_SHA</c> /
428
- <c>GITHUB_REF</c> supply the same fields. When both ADO and GHA vars are
429
- populated, the sources must agree on every field they both publish.</item>
430
- <item>Caller-supplied — if neither CI env is present, the producer populates
431
- <c>versionControlProvenance</c> entries directly in the run-header JSON and the
432
- verb passes them through after shape validation. Callers running outside a
433
- supported CI environment can shell out to <c>git</c> themselves and either
434
- populate the entry directly or stage the corresponding env vars before invoking
435
- the verb.</item>
436
- </list>
354
+ Stamps ADO pipeline identity directly onto the JSON payload, preserving fields not
355
+ surfaced by the typed <see cref="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.Run(Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunOptions,Microsoft.CodeAnalysis.Sarif.IFileSystem)"/> model.
437
356
  </summary>
438
357
  </member>
439
- <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunCommand.TryResolveVcpFields(Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext,Microsoft.CodeAnalysis.Sarif.Multitool.GitHubActionsContext,System.Uri@,System.String@,System.String@,System.String@)">
358
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.TryStampVcp(Newtonsoft.Json.Linq.JObject,System.Uri,System.String,System.String,System.String@)">
440
359
  <summary>
441
- Resolves the three VCP fields (<c>repositoryUri</c>, <c>revisionId</c>,
442
- <c>branch</c>) from the ADO and GitHub Actions environment contexts. ADO is the
443
- higher-priority source: where ADO supplies a value it wins; GHA fills gaps where
444
- ADO is silent. When both sources publish the same field, the values must agree
445
- (case-insensitive URI equality for <c>repositoryUri</c>, ordinal for the rest) or
446
- the method returns false with a diagnostic naming both sources.
360
+ Enriches <c>versionControlProvenance</c> with resolved repository URI, revision id,
361
+ and branch fields. Empty VCP arrays receive a synthesized entry only when a repository
362
+ URI is known; single-entry arrays are enriched; multi-entry arrays are left untouched.
447
363
  </summary>
448
364
  </member>
449
- <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitInitRunOptions">
365
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand.TryResolveVcpFields(Microsoft.CodeAnalysis.Sarif.Multitool.AdoPipelineContext,Microsoft.CodeAnalysis.Sarif.Multitool.GitHubActionsContext,System.Uri@,System.String@,System.String@,System.String@)">
450
366
  <summary>
451
- Options for <c>emit-init-run</c>, which opens an append-only event log
367
+ Resolves VCP fields from ADO and GitHub Actions contexts. ADO seeds each field; GHA
368
+ fills only the fields ADO left empty. Any field both sources publish must agree, or
369
+ stamping is refused.
370
+ </summary>
371
+ </member>
372
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunOptions">
373
+ <summary>
374
+ Options for <c>emit-run</c>, which opens an append-only event log
452
375
  (<c>&lt;output&gt;.wip.jsonl</c>) seeded with a <c>run-header</c> event built from a
453
376
  caller-supplied SARIF <c>Run</c> JSON document. Subsequent producers append events to the
454
- log via the SARIF emit API and finalize via <c>multitool emit-finalize</c>.
377
+ log via the SARIF emit API and finalize via <c>emit-finalize</c>.
455
378
  </summary>
456
379
  <remarks>
457
380
  <para>The run JSON is supplied as a JSON document (file via <c>--input</c> or piped on
458
- stdin), matching the contract used by <c>add-result</c>, <c>add-notification</c>, and
459
- <c>add-reporting-descriptor</c>. SARIF <c>Run</c> is by far the richest object in the
460
- schema; modeling each field as a CLI flag would require a sprawling and ever-expanding
461
- surface that still could not express the legal partial-<c>Run</c> shape the replayer
462
- accepts (multiple <c>versionControlProvenance</c> entries, <c>properties</c> bags,
463
- <c>language</c>, <c>columnKind</c>, <c>defaultEncoding</c>, <c>redactionTokens</c>, …).
464
- The JSON-payload contract keeps the verb generic and lets an AI producer emit
465
- arbitrarily-rich run headers without losing fidelity.</para>
466
- <para>Profile-essential defects are validated at receipt: <c>tool.driver.name</c> must
467
- be a non-empty string; <c>tool.driver.informationUri</c> and
468
- <c>versionControlProvenance[*].repositoryUri</c> must be <c>https</c>;
469
- <c>originalUriBaseIds["SRCROOT"].uri</c> must be <c>https</c> or <c>file</c>;
470
- <c>automationDetails.guid</c> / <c>correlationGuid</c> must be canonical 8-4-4-4-12
471
- GUIDs; <c>properties["ai/origin"]</c> must be <c>generated</c>, <c>annotated</c>, or
472
- <c>synthesized</c>. The verb also rejects a SARIF <em>log</em> accidentally supplied in
473
- place of a <c>Run</c>.</para>
381
+ stdin) and may contain any partial-<c>Run</c> fields the replayer accepts.</para>
382
+ <para>Profile-essential defects are validated at receipt: required <c>tool.driver.name</c>,
383
+ URI schemes, canonical GUIDs, <c>properties["ai/origin"]</c>, and accidental SARIF-log input.</para>
474
384
  </remarks>
475
385
  </member>
476
386
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.GitHubActionsContext">
@@ -546,6 +456,85 @@
546
456
  <c>branch</c>; absent fields are omitted.
547
457
  </summary>
548
458
  </member>
459
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.ReportingDescriptorEmitter">
460
+ <summary>
461
+ Shared implementation behind <c>add-notification-reporting-descriptor</c> and
462
+ <c>add-rule-reporting-descriptor</c>: validates a SARIF reportingDescriptor JSON and
463
+ appends an event to <c>&lt;output&gt;.wip.jsonl</c>.
464
+ </summary>
465
+ <remarks>
466
+ Notifications append to <c>run.tool.driver.notifications[]</c>; rules append to
467
+ <c>run.tool.driver.rules[]</c> and require a well-formed <c>NOVEL-</c> id. Each id may
468
+ appear at most once in its target array.
469
+ </remarks>
470
+ </member>
471
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.ReportingDescriptorEmitter.TryFindDuplicate(System.String,System.String,System.String,System.String,System.String@)">
472
+ <summary>
473
+ Scans the staged event log for a prior descriptor with the same id targeting the
474
+ same array. Returns <c>true</c> with <paramref name="error"/> populated when a
475
+ duplicate is found; <c>false</c> otherwise.
476
+ </summary>
477
+ <remarks>
478
+ The event index in the error matches the event's position in the staged log.
479
+ </remarks>
480
+ </member>
481
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.VcpPortableRoot">
482
+ <summary>
483
+ Single source of truth for turning a <c>versionControlProvenance.repositoryUri</c> into a
484
+ portable artifact root. <see cref="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitFinalizeRebaseVisitor"/> mints the root at finalize;
485
+ <see cref="T:Microsoft.CodeAnalysis.Sarif.Multitool.EmitRunCommand"/> validates the repositoryUri shape at receipt so a producer learns
486
+ of a malformed value at authorship rather than after a full run is assembled.
487
+ </summary>
488
+ <remarks>
489
+ Two repository families are recognized:
490
+ <list type="bullet">
491
+ <item><description>
492
+ Azure DevOps: <c>dev.azure.com</c> only, in the exact form
493
+ <c>https://dev.azure.com/&lt;org&gt;/&lt;project&gt;/_git/&lt;repo&gt;</c>. The portable root is
494
+ the repository root; commit pinning rides on <c>versionControlProvenance.revisionId</c>
495
+ because Azure DevOps per-file web URLs are query-based
496
+ (<c>?path=&amp;version=GC&lt;sha&gt;</c>) and cannot serve as a uriBaseId prefix. The legacy
497
+ <c>&lt;org&gt;.visualstudio.com</c> form is rejected; callers must supply the dev.azure.com
498
+ URL, and the derived root is always emitted in that form.
499
+ </description></item>
500
+ <item><description>
501
+ GitHub: <c>github.com</c> (public OSS and Enterprise Managed Users on dotcom) and the
502
+ data-residency / EMU hosts <c>&lt;slug&gt;.ghe.com</c>, each with a two-segment
503
+ <c>&lt;owner&gt;/&lt;repo&gt;</c> path. The portable root is a commit-pinned blob permalink
504
+ (<c>https://&lt;host&gt;/&lt;owner&gt;/&lt;repo&gt;/blob/&lt;revisionId&gt;/</c>). The host set
505
+ is an allow-list: any other host is rejected so a confidently-wrong link is never minted.
506
+ Custom-hostname GitHub Enterprise Server deployments are out of scope.
507
+ </description></item>
508
+ </list>
509
+ SSH and scp-style clone URLs for the GitHub family are normalized to https first. Azure DevOps
510
+ SSH normalization is not supported; such a repositoryUri is rejected with a pointer to the
511
+ https clone URL. The derivation also yields a canonical repositoryUri — the https identity with
512
+ any userinfo stripped — so a credential-bearing or ssh clone URL never ships in the finalized
513
+ run.
514
+ </remarks>
515
+ </member>
516
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.VcpPortableRoot.TryValidateRepositoryUri(System.Uri,System.String@,System.String@)">
517
+ <summary>
518
+ Validates that <paramref name="rawRepositoryUri"/> has a shape from which a portable root
519
+ can be derived, without minting one (no revisionId required). Used at emit-run receipt.
520
+ </summary>
521
+ </member>
522
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.VcpPortableRoot.TryGetAzureDevOpsTarget(System.Uri,System.String@,System.String@,System.String@,System.String@)">
523
+ <summary>
524
+ Resolves the Azure DevOps organization, project, and repository from
525
+ <paramref name="rawRepositoryUri"/>, applying the same host and credential guards as
526
+ portable-root derivation. Fails when the repository is not an Azure DevOps target. The
527
+ coordinates are URL-path escaped, ready to compose into a REST endpoint path.
528
+ </summary>
529
+ </member>
530
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.VcpPortableRoot.TryDerivePortableRoot(System.Uri,System.String,System.Uri@,System.Uri@,System.String@,System.String@)">
531
+ <summary>
532
+ Mints the portable root for <paramref name="rawRepositoryUri"/>. Used at emit-finalize.
533
+ <paramref name="canonicalRepositoryUri"/> is the clean https identity (userinfo stripped,
534
+ ssh/scp normalized) that should be written back onto the run so the finalized SARIF never
535
+ ships a credential-bearing or non-https repositoryUri.
536
+ </summary>
537
+ </member>
549
538
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.FileWorkItemsCommand">
550
539
  <summary>
551
540
  A class that drives SARIF work item filing. This class is responsible for
@@ -558,6 +547,91 @@
558
547
  SarifWorkItemFiler in order to complete the work.
559
548
  </summary>
560
549
  </member>
550
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.GetSchemaCommand">
551
+ <summary>
552
+ Implements <c>get-schema</c>: emits the embedded JSON Schema that validates the
553
+ input to a named emit verb.
554
+ </summary>
555
+ <remarks>
556
+ The served bytes are the assembly's embedded resources, byte-identical to the schema files
557
+ under <c>GetSchema/</c>.
558
+ </remarks>
559
+ </member>
560
+ <member name="F:Microsoft.CodeAnalysis.Sarif.Multitool.GetSchemaCommand.SchemaByVerb">
561
+ <summary>
562
+ Maps each emit verb to the embedded schema file that validates its input. A null value
563
+ marks a verb whose schema is reserved but not yet available.
564
+ </summary>
565
+ </member>
566
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.GetSchemaOptions">
567
+ <summary>
568
+ Options for <c>get-schema</c>, which emits the JSON Schema that validates the input to a
569
+ named emit verb. The schema is written verbatim to stdout, or to <c>--output</c>.
570
+ </summary>
571
+ <remarks>
572
+ The schemas served here are the same bytes the emit verbs validate their inputs against,
573
+ so a producer can fetch the contract for the exact verb it is about to call.
574
+ </remarks>
575
+ </member>
576
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand">
577
+ <summary>
578
+ Implements <c>get-skill</c>: emits an embedded agent skill that drives the multitool emit and
579
+ validate verbs.
580
+ </summary>
581
+ <remarks>
582
+ The source skill under <c>skills/</c> links its references with repository-relative paths so it
583
+ renders correctly in the repo. On the way out those links are rewritten to raw permalinks pinned
584
+ to the build commit SHA, so the emitted skill resolves its references against the exact
585
+ repository state that shipped the running tool.
586
+ </remarks>
587
+ </member>
588
+ <member name="F:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand.SkillSourceDirectory">
589
+ <summary>
590
+ Maps each skill to the repository-relative directory of its <c>SKILL.md</c>. The directory
591
+ anchors resolution of the skill's repository-relative links into release-pinned permalinks.
592
+ </summary>
593
+ </member>
594
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand.ResolvePinRef(System.String,System.Version)">
595
+ <summary>
596
+ Resolves the git ref the skill's links are pinned to. Prefers the exact build commit SHA
597
+ that SourceLink stamps into the assembly informational version (<c>&lt;version&gt;+&lt;sha&gt;</c>),
598
+ so the emitted links resolve to the precise repository state that shipped the running tool —
599
+ the same tree the embedded skill was taken from. Falls back to the version tag when no SHA
600
+ is stamped (e.g. a build with no git metadata).
601
+ </summary>
602
+ </member>
603
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand.ResolveReleaseTag(System.Version)">
604
+ <summary>
605
+ Derives the version tag (e.g. <c>v5.0.2</c>) from the assembly version, which tracks the
606
+ package's <c>VersionPrefix</c>. Used only as a fallback when no build commit SHA is
607
+ available to pin against.
608
+ </summary>
609
+ </member>
610
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand.RewriteRelativeLinks(System.String,System.String,System.String)">
611
+ <summary>
612
+ Rewrites every repository-relative markdown link in <paramref name="markdown"/> to a raw
613
+ permalink pinned to <paramref name="pinRef"/>. Absolute URLs, protocol-relative URLs, and
614
+ bare fragments are left untouched.
615
+ </summary>
616
+ </member>
617
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillCommand.ResolveRepositoryRelative(System.String,System.String)">
618
+ <summary>
619
+ Resolves a relative path against the skill's repository directory into a repository-root
620
+ path, collapsing <c>.</c> and <c>..</c> segments.
621
+ </summary>
622
+ </member>
623
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.GetSkillOptions">
624
+ <summary>
625
+ Options for <c>get-skill</c>, which emits an agent skill that drives the multitool emit and
626
+ validate verbs. The skill markdown is written to stdout, or to <c>--output</c>.
627
+ </summary>
628
+ <remarks>
629
+ The skill ships embedded in the package, so an agent that resolves the tool (for example via
630
+ <c>dotnet dnx</c>) obtains the procedure from the same artifact it runs. Relative links in the
631
+ source skill are rewritten to commit-pinned permalinks on the way out, so the emitted document
632
+ resolves its references against the exact repository state that built the tool.
633
+ </remarks>
634
+ </member>
561
635
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.MultitoolResources">
562
636
  <summary>
563
637
  A strongly-typed resource class, for looking up localized strings, etc.
@@ -641,6 +715,37 @@
641
715
  inline: We build a map of the input, so we don't want to write inline and immediately invalidate it.
642
716
  </remarks>
643
717
  </member>
718
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.PublishToGhazdoCommand">
719
+ <summary>
720
+ Implements <c>publish-to-ghazdo</c>: uploads a SARIF file to GitHub Advanced Security for
721
+ Azure DevOps. The target organization, project, and repository are derived from the run's
722
+ <c>versionControlProvenance</c>, and the bearer secret is read from an environment variable
723
+ named by <c>--token-env-var</c> so it never appears on the command line or in diagnostics.
724
+ </summary>
725
+ <remarks>
726
+ The secret kind selects the authorization scheme: an Entra access token is a JSON Web Token and
727
+ is sent as <c>Bearer</c>; an Azure DevOps personal access token is opaque and is sent as
728
+ <c>Basic</c> with an empty user name. The body is gzip-compressed in memory and posted as
729
+ <c>application/octet-stream</c> with no <c>Content-Encoding</c> header, because the ingestion
730
+ endpoint gunzips the payload itself. The upload targets <c>advsec.dev.azure.com</c> and falls
731
+ back to <c>dev.azure.com</c> on a 404.
732
+ </remarks>
733
+ </member>
734
+ <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.PublishToGhazdoCommand.DetectScheme(System.String)">
735
+ <summary>
736
+ Selects the authorization scheme for <paramref name="secret"/>. An Entra access token is a
737
+ JSON Web Token (<c>Bearer</c>); an opaque Azure DevOps personal access token is wrapped as
738
+ <c>Basic</c> with an empty user name.
739
+ </summary>
740
+ </member>
741
+ <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.PublishToGhazdoOptions">
742
+ <summary>
743
+ Options for <c>publish-to-ghazdo</c>, which uploads a finalized SARIF file to GitHub Advanced
744
+ Security for Azure DevOps. The Azure DevOps target is derived from the run's version-control
745
+ provenance, and the bearer secret is read from an environment variable named by
746
+ <c>--token-env-var</c>, never from the command line.
747
+ </summary>
748
+ </member>
644
749
  <member name="T:Microsoft.CodeAnalysis.Sarif.Multitool.QueryOptions">
645
750
  <summary>
646
751
  Options for the 'Query' command, which runs a query expression on a SARIF file
@@ -667,14 +772,14 @@
667
772
  AI1006
668
773
  </summary>
669
774
  </member>
670
- <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.ProvideEvidenceBackingUri.Id">
775
+ <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.DoNotPersistFingerprints.Id">
671
776
  <summary>
672
- AI1010
777
+ AI1007
673
778
  </summary>
674
779
  </member>
675
- <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.RedactedRunMarker.Id">
780
+ <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.ProvideEvidenceBackingUri.Id">
676
781
  <summary>
677
- AI1011
782
+ AI1010
678
783
  </summary>
679
784
  </member>
680
785
  <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.ProvideRuleSubId.Id">
@@ -702,7 +807,7 @@
702
807
  AI2010
703
808
  </summary>
704
809
  </member>
705
- <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.DoNotPersistFingerprints.Id">
810
+ <member name="P:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.DoNotPersistPartialFingerprints.Id">
706
811
  <summary>
707
812
  AI2011
708
813
  </summary>
@@ -2338,40 +2443,22 @@
2338
2443
  <returns></returns>
2339
2444
  </member>
2340
2445
  <member name="F:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.SarifValidationSkimmerBase.AIOriginPropertyName">
2341
- <summary>
2342
- The well-known run property whose presence (with any non-null/non-empty
2343
- value) declares that the containing run was produced by an AI emitter.
2344
- AI-emitted SARIF is stochastic by construction message text is rendered
2345
- per-result rather than authored against a table of <c>messageStrings</c>
2346
- templates, and rule ids ride the <c>NOVEL-</c> / <c>BASE/sub-id</c>
2347
- convention rather than a fixed tool prefix. Style-class validation rules
2348
- (e.g. SARIF2002, SARIF2009, SARIF2014, SARIF2015) encode human-authoring
2349
- guidance whose preconditions don't hold for AI output, so they suppress
2350
- themselves when this marker is set.
2351
-
2352
- Correctness-class rules (snippets, hashes, provenance, relative URIs, etc.)
2353
- must NOT consult this marker — those checks apply uniformly to AI content.
2354
- </summary>
2446
+ <summary>
2447
+ Run property whose non-empty value declares AI-origin SARIF. Style-class validation
2448
+ rules may suppress human-authoring guidance when this marker is set; correctness-class
2449
+ rules (snippets, hashes, provenance, relative URIs, etc.) must not.
2450
+ </summary>
2355
2451
  </member>
2356
2452
  <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.SarifValidationSkimmerBase.IsAIOriginRun(Microsoft.CodeAnalysis.Sarif.Run)">
2357
2453
  <summary>
2358
- Returns true when <paramref name="run"/> declares AI provenance via the
2359
- <c>ai/origin</c> run property. Any non-null/non-empty value counts; the
2360
- vocabulary (<c>generated</c>, <c>annotated</c>, <c>synthesized</c>, …)
2361
- is open by design so AI tooling can self-describe at any granularity.
2454
+ Returns true when <paramref name="run"/> declares AI provenance via a non-empty
2455
+ <c>ai/origin</c> run property.
2362
2456
  </summary>
2363
- <exception cref="T:System.ArgumentNullException">
2364
- <paramref name="run"/> is null. Callers reading AI-origin during rule
2365
- dispatch should already hold a non-null run; the strict contract makes
2366
- upstream lifecycle bugs loud rather than masking them as "not AI".
2367
- </exception>
2457
+ <exception cref="T:System.ArgumentNullException"><paramref name="run"/> is null.</exception>
2368
2458
  </member>
2369
2459
  <member name="M:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.SarifValidationSkimmerBase.IsAIOriginRun">
2370
2460
  <summary>
2371
- Instance convenience: reports whether the run currently being visited
2372
- declares AI provenance. Returns false when there is no current run
2373
- scope (e.g. an <c>Analyze(SarifLog)</c> dispatch); otherwise defers to
2374
- <see cref="M:Microsoft.CodeAnalysis.Sarif.Multitool.Rules.SarifValidationSkimmerBase.IsAIOriginRun(Microsoft.CodeAnalysis.Sarif.Run)"/>.
2461
+ Reports whether the run currently being visited declares AI provenance.
2375
2462
  </summary>
2376
2463
  </member>
2377
2464
  </members>
Binary file
Binary file
package/Sarif.pdb CHANGED
Binary file
package/Sarif.xml CHANGED
@@ -6871,38 +6871,21 @@
6871
6871
  Enforces the SARIF SDK AI-authoring convention for <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/>.
6872
6872
  </summary>
6873
6873
  <remarks>
6874
- <para>The emit verb chain (and any future AI-facing acceptor on top of the same SDK)
6875
- is opinionated about what a well-shaped AI finding's <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/>
6876
- looks like. Every accepted result MUST carry a ruleId in one of two forms:</para>
6874
+ <para>Accepted ruleId forms:</para>
6877
6875
  <list type="bullet">
6878
- <item><description><b>Taxonomy sub-id</b> — <c>&lt;BASE&gt;/&lt;sub-id&gt;</c> where
6879
- <c>BASE</c> is a recognized taxonomy entry id (e.g., <c>CWE-89</c>,
6880
- <c>CVE-2021-12345</c>, <c>OWASP-A01-2021</c>) and <c>sub-id</c> is a non-empty
6881
- AI-chosen sub-classifier with no slashes or whitespace
6882
- (e.g., <c>CWE-89/kql-injection-from-config</c>).</description></item>
6883
- <item><description><b>NOVEL escape hatch</b> — <c>NOVEL-&lt;sub-id&gt;</c> for
6884
- findings that don't map to any known taxonomy entry
6885
- (e.g., <c>NOVEL-prompt-injection-via-system-message</c>). The NOVEL- form is
6886
- exclusive: it does not accept a slash. If the AI can connect the finding back to
6887
- a taxonomy entry it MUST use the sub-id form instead.</description></item>
6876
+ <item><description><c>CWE-&lt;number&gt;/&lt;sub-id&gt;</c>, where <c>sub-id</c> is lowercase
6877
+ alphanumeric kebab-case; for example, <c>CWE-89/kql-injection-from-config</c>.</description></item>
6878
+ <item><description><c>NOVEL-&lt;sub-id&gt;</c> for findings with no CWE mapping; the
6879
+ NOVEL- form is flat and does not accept a slash.</description></item>
6888
6880
  </list>
6889
- <para>Rationale: the sub-id form keeps AI1012 silent (sub-classification is what
6890
- the rule wants) AND lets the CWE taxonomy enricher hydrate the base descriptor
6891
- from MITRE metadata, so the AI gets enriched output for free while staying
6892
- honest about which sub-pattern of the base it observed. The NOVEL- form keeps
6893
- non-taxonomy findings emittable without forcing the AI to pretend a CWE applies.
6894
- See <c>docs/AI-RuleId-Convention.md</c> for the full rationale and examples.</para>
6895
6881
  <para>Producers using <see cref="T:Microsoft.CodeAnalysis.Sarif.Writers.SarifLogger"/> directly do not flow through
6896
- this convention it is specific to the AI-authoring emit verb path.</para>
6882
+ this convention; it is specific to the AI-authoring emit verb path.</para>
6897
6883
  </remarks>
6898
6884
  </member>
6899
6885
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsNovel(System.String)">
6900
6886
  <summary>
6901
6887
  Returns true when <paramref name="ruleId"/> starts with the NOVEL- escape-hatch
6902
- prefix. The full grammar is enforced by <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsAcceptable(System.String)"/>; this helper
6903
- is for consumers (e.g., the AI1012 validation rule) that just need to know
6904
- whether the ruleId is a NOVEL- finding and therefore already sub-id-bearing by
6905
- convention.
6888
+ prefix; the full grammar is enforced by <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsAcceptable(System.String)"/>.
6906
6889
  </summary>
6907
6890
  </member>
6908
6891
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsAcceptable(System.String)">
@@ -6914,16 +6897,13 @@
6914
6897
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.ThrowIfUnacceptable(System.String)">
6915
6898
  <summary>
6916
6899
  Throws <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException"/> if <paramref name="ruleId"/>
6917
- does not conform. The thrown message is shaped for AI consumption: it states
6918
- what was rejected, why, and exactly which two forms are accepted.
6900
+ does not conform.
6919
6901
  </summary>
6920
6902
  </member>
6921
6903
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.ThrowIfAnyUnacceptable(System.Collections.Generic.IList{Microsoft.CodeAnalysis.Sarif.Result})">
6922
6904
  <summary>
6923
- Validates every result's <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/>. If any violate the convention,
6924
- throws a single <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException"/> that lists ALL offenders
6925
- so an AI orchestrator can correct them in one round trip rather than discovering
6926
- them one at a time.
6905
+ Throws a single <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException"/> listing every result whose
6906
+ <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/> violates the convention.
6927
6907
  </summary>
6928
6908
  </member>
6929
6909
  <member name="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException">
@@ -6932,13 +6912,9 @@
6932
6912
  values violate <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention"/>.
6933
6913
  </summary>
6934
6914
  <remarks>
6935
- <para>The exception's <see cref="P:System.Exception.Message"/> is intentionally shaped for AI
6936
- consumption: it lists every offending id, explains the two accepted shapes with
6937
- concrete examples, and points at the documentation. A coding agent that catches the
6938
- emitted text (e.g., from <c>multitool emit-finalize</c> stderr) can read it directly,
6939
- correct every offender, and retry — no separate parsing of structured fields is
6940
- required for the common case. The <see cref="P:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException.OffendingRuleIds"/> property is exposed
6941
- for programmatic consumers that prefer structured data.</para>
6915
+ The exception message lists every offending id, the accepted shapes, and the
6916
+ documentation pointer. <see cref="P:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException.OffendingRuleIds"/> exposes the same ids for
6917
+ programmatic consumers.
6942
6918
  </remarks>
6943
6919
  </member>
6944
6920
  <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException.ErrorCode">
@@ -7010,45 +6986,24 @@
7010
6986
  replay engine auto-registers descriptors keyed by <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/>.
7011
6987
  </summary>
7012
6988
  </member>
7013
- <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.ExecutionNotification">
7014
- <summary>
7015
- A self-contained <see cref="T:Microsoft.CodeAnalysis.Sarif.Notification"/> destined for
7016
- <c>invocations[last].toolExecutionNotifications</c>. The replay engine routes events
7017
- of this kind to the execution-notifications array.
7018
- </summary>
7019
- </member>
7020
- <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.ConfigurationNotification">
7021
- <summary>
7022
- A self-contained <see cref="T:Microsoft.CodeAnalysis.Sarif.Notification"/> destined for
7023
- <c>invocations[last].toolConfigurationNotifications</c>. The replay engine routes
7024
- events of this kind to the configuration-notifications array.
7025
- </summary>
7026
- </member>
7027
6989
  <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.Invocation">
7028
6990
  <summary>
7029
- A complete <see cref="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.Invocation"/> object. Producers may append multiple
7030
- invocations per run.
6991
+ A complete <see cref="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.Invocation"/> object. Producer-supplied <see cref="T:Microsoft.CodeAnalysis.Sarif.Notification"/>
6992
+ objects travel inline on the invocation's <c>toolExecutionNotifications</c> /
6993
+ <c>toolConfigurationNotifications</c> arrays.
7031
6994
  </summary>
7032
6995
  </member>
7033
6996
  <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.RuleDescriptor">
7034
6997
  <summary>
7035
- A single <see cref="T:Microsoft.CodeAnalysis.Sarif.ReportingDescriptor"/> targeted at <c>run.tool.driver.rules</c>.
7036
- Emitted by the <c>add-reporting-descriptor --rules</c> verb. The replayer appends the
7037
- descriptor to the rules list before result-driven auto-registration runs, so an
7038
- explicitly-supplied descriptor wins over the minimal one that would otherwise be
7039
- synthesized from a result's <c>ruleId</c>. The verb enforces
7040
- <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention.IsNovel(System.String)"/> on the descriptor id — this kind is
7041
- reserved for NOVEL- novel-finding descriptors. Taxonomy-mapped descriptors (e.g.,
7042
- <c>CWE-89</c>) come from the taxonomy enricher, not from this event.
6998
+ A <see cref="T:Microsoft.CodeAnalysis.Sarif.ReportingDescriptor"/> targeted at <c>run.tool.driver.rules</c>.
6999
+ Explicit descriptors are merged before result-driven auto-registration and are
7000
+ reserved for NOVEL- ruleIds.
7043
7001
  </summary>
7044
7002
  </member>
7045
7003
  <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.NotificationDescriptor">
7046
7004
  <summary>
7047
- A single <see cref="T:Microsoft.CodeAnalysis.Sarif.ReportingDescriptor"/> targeted at
7048
- <c>run.tool.driver.notifications</c>. Emitted by the <c>add-reporting-descriptor</c>
7049
- verb (default target). Notifications use opaque ids by convention (e.g.,
7050
- <c>progress</c>, <c>config-error</c>) and carry no convention gate — any non-empty id
7051
- is accepted. The replayer appends the descriptor to the notifications list verbatim.
7005
+ A <see cref="T:Microsoft.CodeAnalysis.Sarif.ReportingDescriptor"/> targeted at <c>run.tool.driver.notifications</c>.
7006
+ Notification descriptor ids are opaque non-empty strings.
7052
7007
  </summary>
7053
7008
  </member>
7054
7009
  <member name="F:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventKinds.CurrentSchemaVersion">
@@ -7075,8 +7030,7 @@
7075
7030
  </member>
7076
7031
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventLogReader.Read(System.String)">
7077
7032
  <summary>
7078
- Streams events from the given path. Unknown kinds at supported schema versions are
7079
- silently skipped. Unknown <c>v</c> for a known kind throws.
7033
+ Streams events from the given path.
7080
7034
  </summary>
7081
7035
  </member>
7082
7036
  <member name="T:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventLogWriter">
@@ -7123,35 +7077,13 @@
7123
7077
  <para>v1 contract:</para>
7124
7078
  <list type="bullet">
7125
7079
  <item><description>At most one <c>run-header</c> event; if present, it SHOULD be first.
7126
- The header MAY carry a partial <see cref="T:Microsoft.CodeAnalysis.Sarif.Run"/> shape (tool, language, columnKind,
7127
- defaultEncoding, defaultSourceLanguage, originalUriBaseIds, versionControlProvenance,
7128
- automationDetails, baselineGuid, redactionTokens, etc.). <c>results</c>, <c>invocations</c>,
7129
- and <c>notifications</c> on a header are ignored — those belong in their own events.</description></item>
7130
- <item><description><c>result</c> events MUST be self-contained: <c>ruleIndex</c> is ignored
7131
- (re-derived from <c>ruleId</c>); index references into run-level caches are not validated
7132
- in v1 (producers needing indexed references should use <see cref="T:Microsoft.CodeAnalysis.Sarif.Writers.SarifLogger"/>
7133
- directly). Every <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/> MUST conform to
7134
- <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention"/> — taxonomy sub-id form
7135
- (<c>&lt;BASE&gt;/&lt;sub-id&gt;</c>, e.g., <c>CWE-89/kql-injection-from-config</c>) or
7136
- NOVEL escape hatch (<c>NOVEL-&lt;sub-id&gt;</c>). Violations throw
7137
- <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConventionException"/> listing every offender at once.</description></item>
7080
+ Header <c>results</c>, <c>invocations</c>, and <c>notifications</c> are ignored.</description></item>
7081
+ <item><description><c>result</c> events MUST be self-contained. <c>ruleIndex</c> is
7082
+ re-derived from <c>ruleId</c>, and every <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/> MUST conform to
7083
+ <see cref="T:Microsoft.CodeAnalysis.Sarif.Emit.AIRuleIdConvention"/>.</description></item>
7138
7084
  <item><description><c>invocation</c> events are appended to <c>run.invocations</c> in
7139
- event order.</description></item>
7140
- <item><description><c>execution-notification</c> events are buffered and attached at
7141
- finalize to <c>run.invocations[last].toolExecutionNotifications</c>;
7142
- <c>configuration-notification</c> events to
7143
- <c>run.invocations[last].toolConfigurationNotifications</c>. If no invocation has been
7144
- supplied, a synthetic <c>{ "executionSuccessful": true }</c> invocation is created to
7145
- hold them (SARIF requires a home for notifications). Notifications whose <c>timeUtc</c>
7146
- is unset on the event payload are stamped with <see cref="P:System.DateTime.UtcNow"/> at
7147
- replay time so AI execution-timeline consumers can order events without burdening
7148
- producers to track wall-clock themselves (cf. AI2019). Producer-supplied
7149
- <c>timeUtc</c> values are preserved.</description></item>
7085
+ event order and replayed verbatim.</description></item>
7150
7086
  </list>
7151
- <para>Descriptor auto-registration mirrors <see cref="T:Microsoft.CodeAnalysis.Sarif.Writers.SarifLogger"/>: on first
7152
- sighting of a <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleId"/>, the replayer appends a minimal
7153
- <see cref="T:Microsoft.CodeAnalysis.Sarif.ReportingDescriptor"/> to <c>run.tool.driver.rules</c> and back-fills
7154
- <see cref="P:Microsoft.CodeAnalysis.Sarif.Result.RuleIndex"/>.</para>
7155
7087
  </remarks>
7156
7088
  </member>
7157
7089
  <member name="M:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventReplayer.Replay(System.String)">
@@ -7178,26 +7110,16 @@
7178
7110
  <c>notification-descriptor</c> events into the target list on the run's driver.
7179
7111
  </summary>
7180
7112
  <remarks>
7181
- <para>Header pre-populated entries (if any) are preserved by reference, so a producer
7182
- that supplied a descriptor on the run-header AND via an event for the same id is
7183
- already a contract violation that the verb's emit-time dedup should have rejected.
7184
- At replay we trust the invariant and append events after pre-populated entries; if
7185
- the invariant is violated (e.g., a manually-edited event log) the resulting SARIF
7186
- will carry two descriptors with the same id and the validator will flag it.</para>
7187
- <para>For the rules array specifically, this method must run BEFORE
7188
- <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventReplayer.RegisterDescriptorsFromResults(Microsoft.CodeAnalysis.Sarif.Run,System.Collections.Generic.IList{Microsoft.CodeAnalysis.Sarif.Result})"/> so that the explicit descriptors seed
7189
- the <c>idToIndex</c> table — auto-registration synthesizes minimal descriptors only
7190
- for ids that aren't already represented.</para>
7113
+ Header entries are preserved by reference, and descriptor events are appended after
7114
+ them. For rules, this method must run before <see cref="M:Microsoft.CodeAnalysis.Sarif.Emit.SarifEventReplayer.RegisterDescriptorsFromResults(Microsoft.CodeAnalysis.Sarif.Run,System.Collections.Generic.IList{Microsoft.CodeAnalysis.Sarif.Result})"/>
7115
+ so explicit descriptors seed the <c>idToIndex</c> table.
7191
7116
  </remarks>
7192
7117
  </member>
7193
7118
  <!-- Badly formed XML comment ignored for member "M:Microsoft.CodeAnalysis.Sarif.FileEncoding.IsTextualData(System.Byte[])" -->
7194
7119
  <!-- Badly formed XML comment ignored for member "M:Microsoft.CodeAnalysis.Sarif.FileEncoding.IsTextualData(System.Byte[],System.Int32,System.Int32)" -->
7195
7120
  <member name="T:Microsoft.CodeAnalysis.Sarif.FileRegionsCache">
7196
7121
  <summary>
7197
- This class is a file cache that can be used to populate
7198
- regions with comprehensive data, to retrieve file text
7199
- associated with a SARIF log, and to construct text
7200
- snippets associated with region instances.
7122
+ Caches file text, hashes, newline indexes, and region snippets for SARIF enrichment.
7201
7123
  </summary>
7202
7124
  </member>
7203
7125
  <member name="P:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.HashAlgorithms">
@@ -7228,15 +7150,14 @@
7228
7150
  for files. Defaults to <see cref="F:Microsoft.CodeAnalysis.Sarif.HashAlgorithms.Default"/> (SHA-256 only).
7229
7151
  </param>
7230
7152
  </member>
7231
- <member name="M:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.PopulateTextRegionProperties(Microsoft.CodeAnalysis.Sarif.Region,System.Uri,System.Boolean,System.String)">
7153
+ <member name="M:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.PopulateTextRegionProperties(Microsoft.CodeAnalysis.Sarif.Region,System.Uri,System.Boolean,System.String,System.Boolean)">
7232
7154
  <summary>
7233
7155
  Creates a <see cref="T:Microsoft.CodeAnalysis.Sarif.Region"/> object, based on an existing Region, in which all
7234
7156
  text-related properties have been populated.
7235
7157
  </summary>
7236
7158
  <remarks>
7237
- For example, if the input Region specifies only the StartLine property, the returned
7238
- Region instance will have computed and populated other text-related properties, such
7239
- as properties, such as CharOffset, CharLength, etc.
7159
+ For example, a region with only <see cref="P:Microsoft.CodeAnalysis.Sarif.Region.StartLine"/> can receive computed
7160
+ <see cref="P:Microsoft.CodeAnalysis.Sarif.Region.CharOffset"/> and <see cref="P:Microsoft.CodeAnalysis.Sarif.Region.CharLength"/> values.
7240
7161
  </remarks>
7241
7162
  <param name="inputRegion">
7242
7163
  Region object that forms the basis of the returned Region object.
@@ -7252,6 +7173,12 @@
7252
7173
  An optional argument that, if present, contains the text contents of the file
7253
7174
  specified by <paramref name="uri"/>.
7254
7175
  </param>
7176
+ <param name="overwriteExistingData">
7177
+ Controls how an authored region coordinate that diverges from the value computed
7178
+ from the source text is reconciled. When <c>false</c> (the default), the divergence
7179
+ throws an <see cref="T:System.ArgumentException"/>; when <c>true</c>, the authored value is
7180
+ overwritten with the computed value.
7181
+ </param>
7255
7182
  <returns>
7256
7183
  A Region object whose text-related properties have been fully populated.
7257
7184
  </returns>
@@ -7261,12 +7188,18 @@
7261
7188
  Clear current cache.
7262
7189
  </summary>
7263
7190
  </member>
7264
- <member name="M:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.BuildIndexForFile(System.String)">
7191
+ <member name="M:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.ReconcileRegionCoordinate(System.Boolean,System.String,System.Int32,System.Int32)">
7265
7192
  <summary>
7266
- Method to build cache entries which aren't already in the cache.
7193
+ Reconciles an authored region coordinate against the value computed from the source
7194
+ text. If they agree (including the common case where the value was just computed and
7195
+ assigned because the authored value was absent), the value is returned unchanged.
7196
+ On a genuine divergence the behavior depends on <paramref name="overwriteExistingData"/>.
7197
+ </summary>
7198
+ </member>
7199
+ <member name="M:Microsoft.CodeAnalysis.Sarif.FileRegionsCache.ReconcileRegionBounds(System.Boolean,System.Int32,System.Int32,System.Int32)">
7200
+ <summary>
7201
+ Reconciles an authored region whose character span extends beyond the source file.
7267
7202
  </summary>
7268
- <param name="path">Uri.LocalPath for the file to load</param>
7269
- <returns>Cache entry to add to cache with file contents and NewLineIndex</returns>
7270
7203
  </member>
7271
7204
  <member name="M:Microsoft.CodeAnalysis.Sarif.FileSearcherHelper.SearchForFileInEnvironmentVariable(System.String,System.String,Microsoft.CodeAnalysis.Sarif.IFileSystem)">
7272
7205
  <summary>
@@ -9919,16 +9852,9 @@
9919
9852
  taxonomy artifacts.
9920
9853
  </summary>
9921
9854
  <remarks>
9922
- <para>
9923
- Producer-supplied descriptor fields are never overwritten — the enricher only fills
9924
- gaps. This makes the enricher safe to run repeatedly and safe to layer on top of
9925
- producer authoring.
9926
- </para>
9927
- <para>
9928
- This enricher does not add cross-references via <c>reportingDescriptor.relationships</c>
9929
- or <c>result.taxa</c>. Producers that author CWE descriptors directly do not need that
9930
- indirection; the pattern is reserved for tools that map their own rule IDs onto CWE.
9931
- </para>
9855
+ <para>Producer-supplied descriptor fields are never overwritten.</para>
9856
+ <para>This enricher does not add cross-references via
9857
+ <c>reportingDescriptor.relationships</c> or <c>result.taxa</c>.</para>
9932
9858
  </remarks>
9933
9859
  </member>
9934
9860
  <member name="M:Microsoft.CodeAnalysis.Sarif.Taxonomies.CweTaxonomyEnricher.Enrich(Microsoft.CodeAnalysis.Sarif.Run,Microsoft.CodeAnalysis.Sarif.Taxonomies.CweStatus)">
@@ -9939,9 +9865,7 @@
9939
9865
  <param name="run">The run whose <c>tool.driver.rules</c> and <c>tool.extensions[].rules</c> are enriched.</param>
9940
9866
  <param name="statuses">
9941
9867
  The CWE statuses to source enrichment data from. Defaults to <see cref="F:Microsoft.CodeAnalysis.Sarif.Taxonomies.CweTaxonomy.DefaultStatuses"/>
9942
- (<c>Stable | Draft | Incomplete</c>), which excludes <see cref="F:Microsoft.CodeAnalysis.Sarif.Taxonomies.CweStatus.Deprecated"/> by design —
9943
- see <see cref="F:Microsoft.CodeAnalysis.Sarif.Taxonomies.CweTaxonomy.DefaultStatuses"/> for the rationale. Descriptors that reference
9944
- deprecated CWEs are left untouched so the producer notices the migration signal.
9868
+ (<c>Stable | Draft | Incomplete</c>), which excludes <see cref="F:Microsoft.CodeAnalysis.Sarif.Taxonomies.CweStatus.Deprecated"/>.
9945
9869
  </param>
9946
9870
  <returns>The number of descriptors whose content was modified.</returns>
9947
9871
  </member>
package/WorkItems.pdb CHANGED
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@microsoft/sarif-multitool-darwin",
3
3
  "description": "SARIF Multitool for MacOS (Darwin)",
4
- "version": "5.0.2",
4
+ "version": "5.0.3",
5
5
  "scripts": {
6
6
  "postinstall": "chmod u+x Sarif.Multitool"
7
7
  },