You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(lint): key collection-resident publish-gate finding paths by name, not the private snapshot index (#10296)
* feat(lint): name-key collection-resident finding paths at the runtime gate
The 422/advisory wire path for object/permission/book writes now keys the
top-level collection entry by NAME (objects.acme_invoice.sharingModel)
instead of the gate's private per-write snapshot index (objects[417].~),
which no caller can resolve. Rules keep emitting positional paths; the
rewrite happens once, after the differential, in runtime-gate.ts.
Fixes#10064 (maintainer ruling 2026-08-20: Option A)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gcKVsiywU9CcS96S5t9qD
* feat(bench): default the publish-gate differential to the semantic tuple; changeset + regenerated docs
With the wire path name-keyed (#10064), the raw (rule, where, path, message)
tuple IS the semantic tuple, so the bench's differential-verdict line reads
it by default; an index-insensitive canary prints only when a
positional-fallback path moved.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016gcKVsiywU9CcS96S5t9qD
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: content/docs/references/api/protocol.mdx
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1399,7 +1399,7 @@ List packages response
1399
1399
| Property | Type | Required | Description |
1400
1400
| :--- | :--- | :--- | :--- |
1401
1401
|**rule**|`string`| ✅ | Stable diagnostic rule id (`flow-multi-write-unfiltered`, `approval-expression-invalid`, …). Machine-readable and stable across releases — the key a renderer groups or suppresses by. |
1402
-
|**path**|`string`| ✅ | Config path inside the SUBMITTED body (`flows[0].nodes[1].config.multi`), so an editor can jump to the offending key. May be empty when the finding is about the item as a whole. |
1402
+
|**path**|`string`| ✅ | Config path inside the SUBMITTED body (`flows[0].nodes[1].config.multi`), so an editor can jump to the offending key. May be empty when the finding is about the item as a whole. For the collection-resident write types (`object` / `permission` / `book`) the TOP-LEVEL collection entry is keyed by NAME (`objects.acme_invoice.sharingModel`), never by an array index — the gate evaluates against a private per-write snapshot whose indexes no caller can resolve (#10064). Every other write type is the sole member of its own collection, so its `[0]` is trivially stable and stays positional (`flows[0]...`), as do nested positions inside one named item (`objects.acme_invoice.indexes[1]`), which index the author's own document. |
1403
1403
|**where**|`string`| ✅ | Human-readable location — `flow "leave_approval" · node "approve"`. Prose for a person; use `path` for anything mechanical. |
1404
1404
|**message**|`string`| ✅ | What is wrong, in the rule author's own words. |
0 commit comments