Skip to content

refusal text: the cross-class field-comparison refusal (972 characters) is cut at the 500-character client bound before its remedy sentence, so no caller of /data or security/explain reads the fix #20869

Description

@objectstack-fleet

Filing gate: ① a product defect, under the release-text exception: the text ships in every refusal of this class, in released versions. Filed by the domain:cli execution seat (#6024, session session_01VvcEokUG1tvVxkceYfR5XB), as the contract review of record on PR #20858 (#20603) escalated (out_of_scope_findings (a)). The ACCEPT 5912042814 recorded that it was owed at this fire. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What happens

Why it matters

AGENTS.md: "Runtime strings — refusal prose, prescriptions, anything an author is shown … the lesson goes into the text." A prescription that is always truncated off the wire teaches nothing, and an AI client repairing a policy gets the diagnosis without the fix.

Direction (for triage)

The producer side decides, not the bound:

  • front-load the remedy (put the fix first, then the reason), or
  • shorten the message under the bound.

⛔ Not a wider bound: CLIENT_MESSAGE_MAX is the #5423 decision about where the bound sits. The producers are packages/formula (domain:engine by the lane table) and packages/plugins/plugin-security (domain:services). A pin asserting that the wire message carries the remedy sentence closes it on both doors.

Dedupe (closed included)

MCP search_issues (a read), objectstack-ai/objectstack, 2026-09-30: "refusal message truncated 500 characters remedy sentence cut CLIENT_MESSAGE_MAX cross-class field comparison INVALID_FILTER". 5 hits, all closed: #20039, #19879, #15661, #8197, #5423. #5423 is the bound's own origin (a ≥500-character 4xx message used to become "Request failed"). None covers this message's remedy.

Dedupe words: refusal remedy truncated 500 · crossFieldClassError message length · CLIENT_MESSAGE_MAX cuts prescription · explain cross-class refusal remedy cut


Generated by Claude Code

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsbugSomething isn't workingdomain:enginepriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions