Skip to content

docs(lead-page): re-state the duplicate-banner comments for the 17.6.0 pin - #1989

Merged
objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-1887-duplicate-banner-verify
Oct 2, 2026
Merged

objectstack-fleet[bot] merged 1 commit into
mainfrom
claude/issue-1887-duplicate-banner-verify

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #1887

What this is

This is a verification card. I re-measured the lead record page's two duplicate banners in a real browser on the 17.6.0 pin, which now ships the platform change behind R61's root cause (objectui#9100, landed as objectui PR 9104) inside @objectstack/console@17.6.0. The banners behave correctly. Two statements in the banner comments had stopped being true on 17.6.0, and this PR corrects them. Comments only. No predicate, copy or metadata changes.

Measurement 1: banners per lead shape

Setup: a fresh boot of origin/main 572aa44f (@objectstack/* 17.6.0, sqlite, port 4887), viewed in Chromium through Playwright.

lead duplicate_status suspected banner confirmed banner has is not a function
Mira Costa · Atlas Construction (the card's own record) null no no none
Kai Watanabe · Coral Reef Hotels null no no none
Pia Anand · Citrine Finance null no no none
throwaway lead, set to suspected over REST as admin suspected yes, role=status / polite no none
throwaway lead, set to confirmed over REST as admin confirmed no yes, role=alert / assertive none
  • Sampling: each page was sampled twice, 3 s apart, after the record's own name rendered. Both samples matched.
  • Wire: GET /api/v1/meta/page carried both {"dialect":"cel", …} envelopes verbatim.
  • Console: no page errors and no predicate warnings. Every page logged two things unrelated to the banners: one 404 (GET /api/v1/usage/storage) and two console-registry warnings (view:calendar / view:timeline bare-name fallback).
  • Seed data: all 21 seeded leads read duplicate_status: null (present and null) through the data API.

Platform containment, re-measured independently

  • @objectstack/console@17.6.0 dist/.objectui-sha is 31971ff1e28f89cfc45f0c19bc5b05e443f28b79.
  • I checked containment in a blobless objectui clone with full history (not shallow):
    • merge-base --is-ancestor 689953ae9a 31971ff1e2 exits 0.
    • Control: the root commit 9947e9af exits 0.
    • Negative control: the objectui main tip 059bf1b5, a descendant of the pin, exits 1.

What changed, and why

  1. src/sales/pages/lead_detail.page.ts, node-level visibleWhen. The comment said a node-level visibleWhen "is evaluated by SchemaRenderer on data = the data-source ADAPTER, not the row — it cannot see duplicate_status at all". That is false on 17.6.0.
    • Ablation: I moved the suspected banner's predicate from properties.visible to a node-level visibleWhen. That removed the renderer's own gate, and I confirmed the mutation was in dist/objectstack.json before booting.
    • Result: the banner still gated correctly in both directions. It was hidden on the 3 null leads and on the confirmed lead, and shown on the suspected lead.
    • Source agrees: at the pin, SchemaRenderer binds the page's row as record (objectui#5454).
    • Restore: done with git checkout HEAD. Proven by blob equality (e896e107) and an empty git diff HEAD, and the clean artifact was rebuilt.
  2. Both files, the copy-key list. The list named submitLabel.
    • On 17.6.0, PAGE_COMPONENT_COPY_KEYS from @objectstack/spec/system reads ["title","description","label","placeholder","emptyText"]. That is the list cli/dist/utils/i18n-extract.js imports.
    • submitLabel is retired (spec migration translation-component-submit-label-removed).
    • The conclusion the comment draws still holds: body has no translation channel.

Every other factual claim in the banner comment block and in the pin's docstrings re-checked true on 17.6.0, against the shipped console bundle, the objectui source at the pin, or the runtime. The card's report has the claim-by-claim list.

Verification

  • pnpm verify on f2610da8, under the shared lock: os-verify-lock: VERDICT command-exit 0. 174 test files; 3706 tests passed and 1 skipped. The source token ratchet is clean (comment-only edit, no ceiling touched).
  • test/lead-duplicate-visibility.test.ts on its own, on 572aa44f at 17.6.0: 38 of 38 passed.

Acceptance notes (observed, not filed)

  • Stale paths, not edited. These are repo-layout drift, not 17.6.0 claims, so the card's edit rule leaves them alone:
    • test/lead-duplicate-visibility.test.ts line 14 cites src/objects/lead.hook.ts, which now lives at src/sales/objects/lead.hook.ts.
    • lead_detail.page.ts lines 84–85 cite src/actions/…. Those lines sit outside the banner block.
  • e21 / e25 wording, not edited. The comment says the conversion flow's e21 / e25 edges read has(vars.leadRecord.duplicate_status) && … == "suspected". That is loose for e25, which compares == "confirmed". This paraphrases repo source and is not a 17.6.0 claim.
  • Absent-key shape not measured in the browser. os dev --database-driver memory boots, but the data API answers 503 SERVICE_UNAVAILABLE because the package registry can't be read on InMemoryDriver. I measured the shape at the driver instead: driver-memory omits an unwritten duplicate_status, and sqlite returns it present and null.
  • Stale comment in objectui. The record-alert.tsx header at the pin still says a node-level visibleWhen is evaluated "notably data = the data-source ADAPTER, not the row". That contradicts its own SchemaRenderer (objectui#5454, objectui#9308).
  • Token ratchet hint, not acted on. The ratchet suggests re-anchoring the src/sales interaction-layer ceiling to ~30,000. That is outside this card.
  • crm_lead 有三套互不相同的字段分组(fieldGroups 10 / 详情页 5 / 表单 6),详情页的 Details 标签页够不到 notes、重复管理与沟通偏好 #806 is not addressed here. It also edits lead_detail.page.ts and is serialised behind this card.

Generated by Claude Code

…0 pin

Re-verified in a browser on @objectstack/console 17.6.0: a lead with no
duplicate verdict shows neither record:alert banner, and a suspected or
confirmed lead shows only its own. The banner predicates are unchanged.

Two comment statements had stopped being true on 17.6.0 and are corrected:

- A node-level `visibleWhen` does see the row: SchemaRenderer binds it as
  `record`. Measured by moving the suspected predicate there, where it
  gated correctly in both directions.
- The page-component copy keys no longer include `submitLabel`.

Comments only; empty-frontmatter changeset.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ER8ntXZhYebyQ66aXWdjfT
@vercel

vercel Bot commented Oct 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
hotcrm Ignored Ignored Oct 2, 2026 11:32pm UTC

Request Review

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

Labels

ci/cd CI plumbing and the verification pipeline metadata Declarative metadata — schema, security posture, UI surfaces

Projects

None yet

2 participants