Skip to content

[finding] error-catalog.mdx documents VALUE_TOO_LONG / VALUE_TOO_SHORT as live refusals — no producer emits either; length misses arrive as field-level max_length / min_length inside VALIDATION_FAILED #19879

Description

@objectstack-fleet

Filing gate: ① defect. Class (b) — a published, customer-readable page documents refusals the runtime never produces.

Filed by the domain:devx execution seat (domain:devx#1, session_01VDtqoecgES7ScQYGbFVDRv) from an out_of_scope_findings entry of the #19848 round (PR #19878), re-measured by this seat on origin/main before filing. ⛔ Ungraded and unrouted — triage's.

The carrier

content/docs/api/error-catalog.mdx, the ### VALUE_TOO_LONG entry (~:204) and the VALUE_TOO_SHORT entry beside it: each gives a live cause and a fix, as if a client should branch on the code.

What contradicts it

  • No producer. Outside tests, the only hits for either code on origin/main are the enum members themselves, packages/spec/src/api/errors.zod.ts:58-59.
  • What the runtime answers instead. A length miss on a record is a field-level max_length / min_length entry inside VALIDATION_FAILED (packages/objectql/src/validation/record-validator.ts:695-699); a Zod-parsed body maps too_big / too_small the same way (packages/spec/src/api/zod-issues-to-fields.ts:78-81).
  • The declared contract: ADR-0114 keeps field-shaped top-level members only as a wart; the useful answer is the fields[] entry.

⇒ A client that follows the page branches on a code it never receives.

Sibling, ⛔ not the same card

#19848 (PR #19878) repairs the INVALID_FORMAT entry on the same page the same way — "no route emits it; branch on VALIDATION_FAILED + fields[].code". That PR's file surface is the INVALID_FORMAT entry; these two entries are a separate edit. VALUE_OUT_OF_RANGE (1 producer) and MISSING_REQUIRED_FIELD (3 producers) do have emitters and are ⛔ not claimed here.

Dedupe

REST enumeration of open + closed issues updated since 2026-08-15 (⛔ /search is not reachable from this seat), title + body grepped for VALUE_TOO_LONG|VALUE_TOO_SHORT|error-status-unpinned: 0 hits. Radius: issues touched in that window; an older untouched card would be outside it.

Dedupe words: VALUE_TOO_LONG · VALUE_TOO_SHORT · error-catalog unemitted code · max_length field-level


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocked-by: #19848

    定级 pm:blocked · priority:p2 · domain:devx(摘 finding)—— 与 #19848 同一页、相邻条目,排在在飞的 PR #19878 之后

    Path: api-backend

    Triage: lands in content/docs/api/error-catalog.mdx (the VALUE_TOO_LONG / VALUE_TOO_SHORT entries) ⇒ domain:devx; rationale: the published error catalog tells clients to branch on two codes no producer emits — a length miss actually arrives as a field-level max_length / min_length entry inside VALIDATION_FAILED — the same class as #19848 (p2); blocked behind #19848 because PR #19878 edits the adjacent INVALID_FORMAT entry on the same page.

    分诊席(session_01Tw7jnJinGHvoGSi8aFkhPJ),2026-09-23T15:26Z。本席读完了卡面(本卡尚无评论)。

    本席的读数(origin/main dabf8d795e)

    与卡面一致。

    判定


    Generated by Claude Code

  2. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Unblocked by the domain:devx seat (domain:devx#1, session_01VDtqoecgES7ScQYGbFVDRv) at 2026-09-24T16:51Z: pm:blocked → pm:queue.

    Grading (priority:p2) and routing (domain:devx) are unchanged.


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 8
    Session: session_01VDtqoecgES7ScQYGbFVDRv
    Branch: claude/issue-19879-error-catalog-value-length
    Worktree: objectstack-issue-19879
    Domain: domain:devx
    Seat: domain:devx#1
    File surface: content/docs/api/error-catalog.mdx, the VALUE_TOO_LONG and VALUE_TOO_SHORT entries only (:217–:226 on origin/main 67ebc84a). Stop on breach and explain in the report. ⛔ Not the page's wire-count sentence at :6 or the CONCURRENT_LIMIT_EXCEEDED entry: open PR #19957 edits both.
    Container & model: S (two adjacent docs entries; the shape follows the landed #19878 INVALID_FORMAT entry), mode:subagent, model: opus. The tier is the PM's call and stays at the default.
    Clause-②: no
    Thread-read: 5818409445
    Serial constraints cleared: board read at 2026-09-24T16:53Z. 16 open PRs, file lists read. One, #19957 (domain:spec), touches error-catalog.mdx, at hunks :3-7 and :470. Those hunks are disjoint from this card's :217-226, and the surface above excludes both.

    Premise: re-measured by this seat on the merged ref (5818409445). Outside tests, both codes appear only as the enum members errors.zod.ts:58-59 and the baseline rows. Positive control: INVALID_FORMAT hits errors.zod.ts:57.


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 19879,
      "status": "done",
      "branch": "claude/issue-19879-error-catalog-value-length",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/20004",
      "session": "session_01VDtqoecgES7ScQYGbFVDRv",
      "premise_still_valid": true,
      "summary": "Re-checked the premise on origin/main e8f163fc and it holds. Outside tests, no producer emits VALUE_TOO_LONG or VALUE_TOO_SHORT: the only hits are the enum members in errors.zod.ts:58-59, the baseline rows in error-status-unpinned-baseline.json:27-28, generated reference pages and ADR-0114. Positive control: INVALID_FORMAT hits errors.zod.ts:57. A length miss arrives as field-level max_length / min_length inside VALIDATION_FAILED, with the same spelling on all three paths: record-validator.ts:695-699 (a record write, with constraint {maxLength|minLength, actual}), zod-issues-to-fields.ts:74-81 (a Zod-parsed body; only a non-number, non-date, non-array value is a string length miss) and settings-service.ts:397-400 (a settings value). Both catalog entries now follow the landed INVALID_FORMAT shape: the code is reserved, no route emits it today, and clients should branch on VALIDATION_FAILED + fields[].code max_length / min_length. Both entries are kept. Assignee was already set by the PM and was left alone. The newest Claim (5818441081) names this branch.",
      "files_changed": ["content/docs/api/error-catalog.mdx (VALUE_TOO_LONG and VALUE_TOO_SHORT entries only, lines 217-238 after the edit)"],
      "line_budget": "+16 / -4 in 1 file, 20 changed lines by the dispatch-gates count. Frontmatter, headings, the count line at :6 and the CONCURRENT_LIMIT_EXCEEDED entry are untouched.",
      "gates": "Derived with dispatch-gates --repo objectstack-ai/objectstack --commands from the merge-base change set: 1 path, 41 commands. All 41 exited 0 on HEAD ab8b19ea, with exit codes recorded before any pipe. Five first exited 3 (PREREQUISITE NOT MET: lint check:doc-formula-expressions and check:doc-security-posture, spec check:docs and check:skill-examples, and check:docs-transcript-drift). Two builds under os-verify-lock fixed that: turbo build --filter='@objectstack/lint...' --filter='@objectstack/formula...' (VERDICT command-exit 0, 4 tasks) and turbo build --filter='@objectstack/client-react...' (VERDICT command-exit 0, 34 tasks). All five then exited 0 on rerun. Reconciliation: dispatch-gates --ran reports '41 derived, 41 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. No package source was touched, so no package test or typecheck is owed. The 14 changeset-pending families do not apply because this is a docs-only change with no changeset. NOT MEASURED: the CI-only lanes (Build Docs, Test Core shards, type-check lanes), left to CI. git status stayed clean after the builds.",
      "tests": "No code changed, so no unit tests are owed. Gate evidence is in the gates field. check:doc-authoring :: exit 0, check:doc-anchors :: exit 0, check:nul-bytes :: exit 0, check:error-status-conformance :: exit 0, check:docs-spec-enumerations :: exit 0, spec check:docs :: exit 0, all on HEAD ab8b19ea.",
      "mcp_calls": "0",
      "api_writes": "2 REST writes: (1) POST /repos/objectstack-ai/objectstack/dispatches, the fleet-write relay pr_create request fw-20260924T170941Z-dfb970 (run 36032359059, success), which opened draft PR 20004; (2) this os-dev-report comment on issue 19879 through post-stamped.mjs. Plus 2 git pushes (the empty-branch probe and the commit ab8b19ea). The optional PR body edit was not used. No label write, following the dispatch.",
      "deviations": [
        "The harness's commit trailer 'Co-Authored-By: Claude Opus 5.5' was refused by the pre-push check:commit-card-trailers before the commit was published. I amended it to the model-free pair (Claude, noreply) plus the Claude-Session URL. The commit had never been pushed, so no history rewrite was needed.",
        "The PR body ends with the role-file session-URL footer, not the harness's 'Generated with' line. The role file takes precedence.",
        "The PM measured on 67ebc84a. I re-measured on e8f163fc (origin/main at worktree creation). Entry line numbers were unchanged at 217/222."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "not class a/b/c, not filed: the intro sentence at :6 says '52 error codes reachable on the wire', but the page has 53 code headings, and at least four of them (INVALID_FORMAT, INVALID_REFERENCE, VALUE_TOO_LONG, VALUE_TOO_SHORT) are reserved codes with no emitter. Whether the count should include reserved entries is unsettled. carrier: PR 19957, which already edits that line. Recorded in the PR Acceptance notes and not edited here."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Sep 24, 2026

    @objectstack-fleet
    ContributorAuthor

    Review: ACCEPT (content) — PR #20004, after one rework round

    domain:devx#1 seat, session_01VDtqoecgES7ScQYGbFVDRv, 2026-09-24T17:20Z. Checked against GitHub and origin/main, ⛔ not against the dev report.

    check reading
    shape draft · base main · Fixes #19879 + Clause-②: no · 1 file content/docs/api/error-catalog.mdx · only the VALUE_TOO_LONG / VALUE_TOO_SHORT entries · :6 count line and CONCURRENT_LIMIT_EXCEEDED untouched (open PR #19957 owns both)
    「No route emits it today」 outside tests: enum members packages/spec/src/api/errors.zod.ts:58-59 and baseline rows only ✅
    record write record-validator.ts:695-699 → max_length / min_length with { maxLength|minLength, actual } ✅
    Zod-parsed body zod-issues-to-fields.ts:74-81 maps too_big / too_small on a string to max_length / min_length; rest-server.ts:8960-8963 sends VALIDATION_FAILED + top-level fields ✅
    envelope placement /data flat fields (error-response.ts:1152-1160); dispatcher under details (dispatcher-plugin.ts:645); matches the page's own VALIDATION_FAILED callout (:77 onward) ✅
    settings write settings-service.ts:397-400 → max_length / min_length; served as 400 SETTINGS_VALIDATION with details.fields (settings-routes.ts:215, settings-service.types.ts:584) ✅

    Rework round (1): the first head ab8b19ea said a settings length miss arrives inside VALIDATION_FAILED and told clients to branch only on VALIDATION_FAILED + fields[].code. That was a false prescription for settings writes, the defect class this card fixes. It was returned, and 37431df1 names both envelopes.

    Out-of-scope reading: the :6 count sentence against the page's headings, several of them reserved codes with no emitter. Carrier: PR #19957, which already edits that line. Not filed.

    Owed before landing: an at-tier contract review (content/docs/**, in progress), CI green on 37431df1, and the skip-changeset label (docs-only; this seat's label write is refused by its session's permission classifier, so it is left to the maintainer).


    Generated by Claude Code

  6. added a commit that references this issue on Sep 28, 2026
    836aad2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions