Skip to content

service-automation: the get_record form descriptor offers limit 0 and negatives, which the narrowed contract (#25302) refuses at save (follow-up to #25302) #25361

Closed

Description

@objectstack-fleet

Filing gate ③, a follow-up owed by landing work: out-of-scope finding of the os-dev-report 6356038913 on #25302, escalated by the contract review 6356385532 on PR #25357 (③). Filed by domain:spec seat 1 (seat post #6017), os-tesla, session session_013odhA26dvzy7pQmevdTTvy. ⛔ Not a claim. Grade and lane are triage's.

The gap

Ask

Add minimum: 1 to the get_record form descriptor's limit, or derive the descriptor from the contract, so the form and the save door agree. Lands after PR #25357.

Dedupe: searched open issues for "get_record limit form descriptor minimum crud-nodes"; no carrier. New.


Generated by Claude Code

Activity

  1. added
    area:workflowApprovals and automation — the work that runs without a person driving it
    bugSomething isn't working
    domain:servicesRetired 2026-10-22, alias of domain:server (services surface); in-flight cards keep it until landed
    and removed on Oct 23, 2026
  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 · domain:services seat 1 (seat post #6021, project run by the Sales account) · S mechanical card, in-seat subagent · 2026-10-23T12:49Z
    Session: session_016g7nYP9wdNx1GDa5XDr7Uy
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-25361-get-record-limit-minimum
    Worktree: objectstack-issue-25361
    Domain: domain:services
    Seat: domain:services#1
    File surface: packages/services/service-automation/src/builtin/crud-nodes.ts (the get_record form descriptor's limit), its test, and a changeset. ⛔ packages/spec is not edited (PR #25357 already narrowed the contract). The #25222 split series (PR #25270) cuts service-automation/src/engine.ts only. Stop on breach; explain in the report.
    Container & model: S 级机械卡, mode:subagent (general-purpose subagent loading .claude/agents/os-dev.md as its role file), model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: service-automation's own descriptor offers values its contract refuses | the save door already refuses them loudly (PR #25357) | flow authors in the designer form, today
    Thread-read: none
    Serial constraints cleared: PR #25357 (the contract narrowing this follows) merged 2026-10-23T03:43:53Z. Open PR #25270 (#25222) touches service-automation/src/engine.ts, not builtin/crud-nodes.ts.
    Resume-from: none

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 25361,
    "status": "done",
    "branch": "claude/issue-25361-get-record-limit-minimum",
    "pr": "#25441",
    "session": "session_016g7nYP9wdNx1GDa5XDr7Uy",
    "premise_still_valid": true,
    "summary": "Premise held at origin/main f0fdd45: crud-nodes.ts declared get_record limit as { type: 'integer', title: 'Limit' } with no minimum, while GetRecordConfigSchema.limit is int().positive(). The descriptor now declares minimum: 1 (landing = claimed file; no spec or engine.ts edit). Derivation from the Zod was not used: no builtin/ descriptor is derived from its spec Zod today, and the bounded siblings (loop.maxIterations, try_catch.retry.*) hand-declare minimum/maximum, so this follows that pattern. New pin in builtin-node-form-zod-ledger.test.ts asserts the descriptor minimum is 1 and that the contract accepts the minimum, refuses minimum-1 and refuses 0. Measured every numeric descriptor key in builtin/ against its contract (loop.maxIterations, try_catch.retry.maxRetries/backoffMs/backoffMultiplier/maxRetryDelayMs, http.timeoutMs, screen.fields[].min/max): all agree, so no other mismatch exists. PR #25441 opened draft, assignee os-sales.",
    "tests": "head 21ecd56. Lock: 'pnpm --filter @objectstack/service-automation typecheck && pnpm --filter @objectstack/service-automation test' -> VERDICT command-exit 0; Test Files 198 passed (198), Tests 2619 passed (2619). Targeted: builtin-node-form-zod-ledger.test.ts + config-schemas.test.ts -> 2 files, 18 tests passed. Ablation (fix committed first, scripts/ablation-replace.mjs): anchor "limit: { type: 'integer', minimum: 1, title: 'Limit' }" x1->x0, blob b7d8ec771a76->5c181206f838; new pin red 'AssertionError: expected undefined to be 1' (1 failed | 9 passed); restored blob == HEAD b7d8ec771a76, git diff HEAD empty. Test imports crud-nodes.js from src (no dist hop).",
    "gates": "Local: dispatch-gates --commands derived 67 families at 21ecd56; 66 exit 0; pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (no full-repo dist/) -> NOT MEASURED locally, reason: needs full pnpm build, CI runs it. --ran reconciliation: 67 derived, 66 run, 1 UNRUN (dual-build-cjs-loads, as declared). CI at report time: Check Changeset in_progress, Governed Surface Queue Guard in_progress; Lint & Repo Gates, TypeScript Type Check, Test Core, Build Core not yet listed (in_progress/queued).",
    "dogfood_battery": "n/a — no ! in the PR title and Clause-②: no (no narrowing arm)",
    "mcp_calls": "0",
    "api_writes": "2 — fleet-write relay pr_create (POST pulls + assignee POST, run 39962914845) creating #25441; post-stamped issue comment on #25361 (this report). Plus git push (not REST).",
    "open_questions": [],
    "out_of_scope_findings": []
    }

  4. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:services seat 1 (seat post #6021) · os-sales · session_016g7nYP9wdNx1GDa5XDr7Uy · 2026-10-23T14:44Z

    reading value
    PR #25441 MERGED through the queue (ACCEPT 6366803226), head 21ecd5680e
    origin/main carries 2581efbcbd

    State: the card was closed by Fixes #25361. pm:dispatched is off and the assignee is cleared.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:workflowApprovals and automation — the work that runs without a person driving itbugSomething isn't workingdomain:servicesRetired 2026-10-22, alias of domain:server (services surface); in-flight cards keep it until landedpriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions