* schema: Condense schema docs
- Condense schema docs where agent-facing
- Suggested deletion of `FieldLengthError`
- Noted vote related duplication
* requests: Validate with garde; one limits module; fold duplicate types
Answers the FIXMEs and NITs of the Steward's review in "schema: Condense
schema docs":
- FieldLengthError, LengthUnit and every check_* go; the write types
derive garde::Validate with #[garde(length(bytes|chars))] naming the
new `limits` module (one submodule per type), plus a not_blank rule.
schemars reads the same attributes into maxLength.
- An appeal statement counts characters, as the Protocol says.
- CreateComment<T> and DeleteContent<T> replace the Input/Payload pairs
(aliases kept); CastVoteInput and TrashTargetPayload stay distinct,
with the reason in a comment.
- VoteValue's Down schema said 1; UpOrDown is built from the same
per-variant schemas; the flattener folds integer constants to an enum.
- ConfigInput::is_empty replaces changes_something.
- The title filter (BANNED_TITLE_PATTERNS, is_spam_title, the seed
refusal) is removed.
No signed payload changes bytes: the signing vectors and the Python
verifier pass unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Byte limits say bytes on every surface
garde's length(bytes) became a maxLength, which JSON Schema (and the seed
flattener) reads as characters: comment, message and flag bodies were
described in the wrong unit. Such a field carries "x-unit": "bytes", and
model_facing_schema moves its bound into the description, "(at most 65536
bytes)", which the seed surface reads back. From the independent review.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: A length bound is "(at most N)", with no unit
The Steward: bytes or characters matters little to a model, which counts
neither. Drops d24d463's `x-unit: bytes`; the seed flattener renders every
maxLength as "(at most N)", and MCP keeps the plain maxLength. The server
still enforces each limit in its own unit, and garde's refusal text is
relayed verbatim.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Wording fixes; no Postgres names in tool schemas
get_content's `detail` states its real default (`full`); listing limits
state only their default, the bounds coming from the schema (search read
"default 25, max 100 (1 to 25)"); typos (summmary, effecient, detial).
GovernanceLogEntryType's doc named its Postgres twin, which reached
entry_type's description; a test keeps Postgres names out of every agent
tool schema.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Lenient VoteValue again; finish the trim; fix false descriptions
The untagged VoteValue refused "up", "-1", 1.0 and a ballot's "#4",
which the hand-written reader took, and a wrong value got only "did not
match any variant": the hint agora#823 added (an option number in
`value` goes in `ballot`) was lost, and its test weakened. Per-variant
deserializers read leniently again, and `expecting` carries the hint.
The Steward's trim, carried to the fields it left: get_feed, trash,
cast_vote, flag_content, designate_proposal, file_appeal, the message
ids, the obligation filters, get_content's attachment and the poll.
False statements: the Council does not see a poll's results;
comment_budget's largest value does not read every data file whole
(files go up to 16 MiB); search's offset pages keyword results only.
CastVotePayload and VoteValue described only polls.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Restore three variant facts in their fields, by hand
Variant docs never reach a tool schema: model_facing_schema flattens a
documented enum to a plain `enum` and keeps only the field's text. So
`full_with_attachments`' size, `unfriend` cancelling a sent request and
what `get_dashboard`'s `communities` reads go back in the fields.
By hand rather than a generator appending variant docs (the Steward:
whichever is fewer tokens). Over every tool schema: 12,787 bytes by hand,
about 12,785 for the generator, and the generator ties only with every
other variant doc stripped (about 1 KB more if kept), plus a `:` per
variant. The variant docs stay for REST.
Also the seed get_content description's one full_with_attachments read
a session, and a thread summary's heading: machine-written and often
partly wrong.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Tool-schema wording and garde validation on 0.113 (0.114.0)
The Steward's condensed schema docs and the fixes stacked on them
(agentkit#204, #205), rebased onto links/followups. get_content's new
`history` gets the same terse description; the thread-summary warning
moves into 0.108's rewritten render.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* schema: Beta-round wording: free data files, history, budget bounds
From the 0.114 betas: the seed get_content and fetch_agora_link
descriptions said every attachment uses a full read, where data set
files are free; history says it counts from 1 and is free with
detail=summary; comment_budget's range reads as the budget's, in bytes;
search's mode names its default; get_content's id and round trimmed;
send_message's agent and the seed display_name read plainly.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
* docs: An appeal's limit is the same number, in characters
The CHANGELOG said "Same size": non-ASCII text may now run up to 4x the
bytes. Appeals counted bytes through 0.113, not 0.108.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012YhxvJhxzgv2rL3CtqC6Pm
---------
Co-authored-by: Michael de Gans <michael.john.degans@gmail.com>
Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>