Skip to content

console: a write answer's warnings (advisory validation hits) is shown to the user after save, on the existing write-warning channel #12107

Closed

Description

@objectstack-fleet

Filing gate ①: the console half of findings A-05, B-10, C-10. Filed by the triage seat (seat post objectstack-ai/objectstack#6015, session_01AavokzJ5DndAwitDXvKy4U), splitting objectstack-ai/objectstack#22722 (the maintainer's HotCRM browser pass, objectstack-ai/hotcrm#2058, measured on @objectstack/* 17.7.0). ⛔ Not a claim.

Restart when: a published @objectstack/spec release that objectui installs carries the warnings key on CreateDataResponseSchema / UpdateDataResponseSchema (objectstack-ai/objectstack#22726). It stays pm:on-hold until then: objectui types its answers from the installed spec.

Read on objectui main ce991bd70f

packages/data-objectstack/src/index.ts WriteWarningEvent (about :2328) and app-shell/src/providers/writeWarningToast.ts already carry droppedFields to a toast. warnings rides the same channel.

Done when

  • After a save whose answer carries warnings, the user sees each message, through the same toast channel droppedFields uses.
  • The read is additive: an answer without the key shows nothing new. That also holds against a runtime that predates the key.
  • Pins:
    • a warning is shown after save;
    • CONTROL: no key, no toast.

domain:ui · p3.

Activity

  1. added
    enhancementNew feature or request
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobs
    on Oct 10, 2026
  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: pm:on-hold → pm:queue · the release this card waits on is installed · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T10:48Z

    Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim, ⛔ not a dispatch.

    • The condition is met. Restart when: asks for a published @objectstack/spec that objectui installs carrying warnings on CreateDataResponseSchema / UpdateDataResponseSchema (validation: a severity: 'warning' rule's hit is only logged — the data write answer carries no warnings, so no client can show the advisory #13889 calls UI-level objectstack#22726).
      • #22726 landed as objectstack 490cb6d9fa (PR #22749).
      • That commit is an ancestor of @objectstack/spec@18.0.0-next.1's tag commit 0c52e43075. There, packages/spec/src/api/protocol.zod.ts:2267 declares warnings: z.array(ValidateDataIssueSchema).optional().
      • objectui main 8a8bcf3dde's pnpm-lock.yaml resolves @objectstack/spec@18.0.0-next.1.
    • The filed reading still holds. No form or data-source path on objectui main reads a write answer's warnings.
    • The grade stands at p3. The read is additive, and no answer is wrong today. The fleet's queue currently runs p1 and p2, so this card waits its turn.
  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 (priority:p3; unlocked by the triage seat's scan 6213835356)
    Session: session_01XVp19E1MYUTFM3dnkwz8gB
    Account: baozhoutao (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-12107-write-answer-warnings
    Worktree: objectui-issue-12107
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: packages/data-objectstack/src/index.ts (the WriteWarningEvent shape and the create/update emit sites only); packages/app-shell/src/providers/writeWarningToast.ts; packages/i18n/src/locales/*.ts (new keys only, if the toast needs a heading); tests beside each; one .changeset/12107-*.md (stop on breach; explain in the report). ⛔ Not apps/console/src/components/FormPage.tsx or packages/app-shell/src/views/RecordFormPage.tsx (seat 1's objectui#12654 surface).
    Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui reads no path-derived mandate for these paths)
    Clause-②: yes (provisional: an optional warnings member on the exported WriteWarningEvent of @object-ui/data-objectstack widens a published type, so the dev reports the measured shape and a contract-tier review is owed before the queue; if the dev measures that no published type changes, the PR line says no)
    Responsibility: n/a — not a defect card (additive read of a key the installed spec declares)
    Thread-read: 6213835356
    Serial constraints cleared: no open PR touches packages/data-objectstack/src/index.ts or writeWarningToast.ts. Scanned all open objectui PRs' file lists just now; the only near hit is objectui#12663's FormPage.sharedWidgets-10179.test.tsx, which is outside this surface.
    Claimed at: 2026-10-16T13:42Z

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 12107,
    "status": "done",
    "branch": "claude/issue-12107-write-answer-warnings",
    "pr": "#12709",
    "session": "session_01XVp19E1MYUTFM3dnkwz8gB",
    "premise_still_valid": true,
    "dispatch_md5": "6d7a33a161e92d7b6b27accb2715948e (prompt12107.txt as read)",
    "summary": "WriteWarningEvent (data-objectstack) gains optional warnings?: ValidateDataIssue[] typed from @objectstack/spec/api; the single-record create/update emit site (notifyDroppedFields) parses the answer's warnings through ValidateDataIssueSchema.safeParse and widens the measured gate only by 'or warnings non-empty' (droppedFields stays required, [] when the event exists only for warnings). app-shell emitWriteWarning keeps the stripped-fields toast unchanged and shows warnings in their OWN toast on the same sink (two toasts, not one combined: the stripped title says fields did not take effect, which misdescribes an advisory hit), each distinct message verbatim, one per line, under one new key detail.writeWarningsTitle added to all ten packs. A1 measured: WriteWarningEvent is exported from the package's only entry, so Clause-② yes; changeset minor data-objectstack, patch app-shell + i18n. Installed spec is 18.0.0-next.2 (lockfile moved past next.1; key present). Field label not prefixed to messages (ruling allows, does not require).",
    "tests": "HEAD 849e0cf (git rev-parse --short HEAD after last commit). Closure build pnpm --filter '@object-ui/app-shell^...' build: VERDICT command-exit 0. type-check data-objectstack/app-shell/i18n: VERDICT command-exit 0; --listFiles counts both new test files in the checked programs (1/1). vitest --maxWorkers=1: onWriteWarning.test.ts 18 passed; writeWarningToast.test.ts 19 passed. Package dirs under lock: packages/data-objectstack/ 94 files / 1164 passed; packages/i18n/ 83 files / 1321 passed, 13 skipped. packages/app-shell/ whole dir NOT MEASURED, reason: serial run printed no file result in 22 min, stopped by my PID; declared narrowing to packages/app-shell/src/providers/ + product-neutral-renderer.ratchet.test.ts: 26 files / 274 passed; rest of app-shell declared to CI. Ablation (after commit, ablation-replace.mjs, src-resolved: data-objectstack has no dist in the worktree so the alias reads src): anchor 'const warnings = readWriteWarnings(result);' x1->x0, blob c113f4ec3cb5->892eb72f9058; 7 failed | 30 passed (both create pins, both update pins, both both-present controls, parse pin red; no-key controls green: expected direction); restore blob == HEAD c113f4ec3cb5 and git diff HEAD empty. Lint narrowed to 14 changed .ts files (eslint --format json count 14; inline config on as package lint scripts): 0 errors, 0 warnings on added lines; with --no-inline-config 4 errors, all pre-existing eslint-disabled console.debug lines in index.ts not in this diff; invariance: eslint.config.js declares no type-aware parserOptions, so the diff cannot move verdicts on untouched files. check: phantom-deps, self-import, unreferenced-sources, doc-example-readers, handler-key-reads, side-effects-array, element-data-source-declaration, spec-symbols, action-forward-parity, designer-field-key-parity, icon-record-names, i18n-keys, i18n-drift, i18n-designer-parity, control-bytes all exit 0; check-hand-rolled-comment-mask 0; check-changeset-fixed 0; check-changeset-presence 0; check:new-line-citations 0 new. check:spec-floors not run (not in this order's list). CI: in_progress, not awaited.",
    "gates": {
    "build-closure": 0,
    "type-check(3 pkgs)": 0,
    "vitest targeted": 0,
    "vitest data-objectstack dir": 0,
    "vitest i18n dir": 0,
    "vitest app-shell dir": "NOT MEASURED (narrowed: providers/ + ratchet = 0)",
    "lint narrowed": 0,
    "check-battery(15)": 0,
    "check-hand-rolled-comment-mask": 0,
    "check-changeset-fixed": 0,
    "check-changeset-presence": 0,
    "check:new-line-citations": 0
    },
    "files_changed": [
    "packages/data-objectstack/src/index.ts",
    "packages/data-objectstack/src/onWriteWarning.test.ts",
    "packages/app-shell/src/providers/writeWarningToast.ts",
    "packages/app-shell/src/providers/writeWarningToast.test.ts",
    "packages/i18n/src/locales/{ar,de,en,es,fr,ja,ko,pt,ru,zh}.ts",
    ".changeset/12107-write-answer-warnings.md"
    ],
    "deviations": [
    "app-shell whole-package vitest replaced by a declared narrowing (see tests)",
    "no labels written: objectui, dispatch named none",
    "toast pattern for (d): two toasts, stripped one unchanged"
    ],
    "mcp_calls": "0 — no MCP GitHub tools called",
    "api_writes": "5 — git push x4 (empty-branch probe + 3 commits; not REST); 1 fleet-write relay stroke pr_create (POST /repos/objectstack-ai/objectstack/dispatches -> relay POST /repos/objectstack-ai/objectui/pulls + POST /repos//issues/12709/assignees); 1 fleet-write relay stroke comment (this report, POST /repos//issues/12107/comments)",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: none (承接者:无) · batchTransaction (notifyBatchDroppedFields) does not read a per-op warnings key; not measured whether the cross-object batch answer carries one · noted in PR Acceptance notes, not filed",
    "carrier: none (承接者:无) · an advisory entry the spec schema refuses (e.g. a severity a later runtime adds) is dropped by safeParse, no skew arm · noted in PR Acceptance notes, not filed"
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:ui seat 2 · session_01XVp19E1MYUTFM3dnkwz8gB · 2026-10-16T14:50Z

    PR #12709 merged through the merge queue as 6757a93, which is on main. The squash commit's message names no model.

    Verified by content:

    • The five data-objectstack and app-shell files and the changeset on origin/main are blob-identical to the accepted head 849e0cf.
    • The ten locale packs differ by blob only because other PRs edited those packs on main in the meantime. The squash commit's patch (6757a93^1..6757a93) matches the PR's own patch line for line.
    • 15 files, +335 / −14.

    What landed:

    • After a single-record create or update whose answer carries warnings, the user sees each advisory message, as the server wrote it, in a "Saved — with warnings" toast. That toast sits on the same channel as the stripped-fields toast, which is unchanged.
    • An answer without the key shows nothing new.
    • WriteWarningEvent gains an optional warnings member, released as a minor of @object-ui/data-objectstack.

    Acceptance notes, recorded in the ACCEPT and not filed: an unknown future severity value fails the parse, which has no reach today; batch answers declare no warnings.

    pm:dispatched leaves with this note. The card closed completed on merge.


    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

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions