Skip to content

sys_email.highlightFields names to, but the field is to_addresses — a dangling reference on a shipped platform object #15629

Description

@claude

packages/platform-objects/src/audit/sys-email.object.ts:32 declares:

highlightFields: ['subject', 'to', 'status', 'sent_at'],

The object has no field named to. Its recipient column is to_addresses (sys-email.object.ts:59); the other three entries (subject, status, sent_at) all resolve. So highlightFields[1] is a dangling field reference on a shipped platform object.

How it was found

Measuring the shipped object corpus for #15495 — every *.object.ts under packages/ and examples/, 116 objects, each pushed through the real object write door (runRuntimeAuthoringRules({ type: 'object' })) with its siblings as context. Two objects raise an error there, and this is one of them:

ERR sys_email: object-field-ref-unknown objects.sys_email.highlightFields[1]
  highlightFields[1] "to" is not a field on object "sys_email".

The finding is object-field-ref-unknown, the rule #15254 added and crossed onto the object write door. It is not raised by anything this measurement added — it is the state of main today.

Why it matters

highlightFields drives the object's default list columns, record cards, previews and the detail highlight strip. Every consumer silently skips an entry it cannot resolve, so each of those surfaces renders one field short with no error anywhere — the recipient column, on the platform's own email log.

There is a second consequence now that the object door gates this rule: sys_email in its current shape cannot be republished through PUT /api/v1/meta/object or a package publish — the door answers 422 INVALID_METADATA. It ships as a registry object today, so nothing is broken at boot; it is a live trap for anyone who edits it through a door rather than the file.

Fix

Rewrite the entry to the real column name:

highlightFields: ['subject', 'to_addresses', 'status', 'sent_at'],

Deliberately left for its own card rather than ridden along on #15495: that PR is scoped to packages/lint, and this is a one-line content fix in packages/platform-objects with its own package and changeset.

Also seen in the same sweep (separate, lower confidence)

dc_account (packages/qa/downstream-contract/src/account.object.ts) declares no sharingModel, so the same door raises security-owd-unset at error. That may well be intentional for a minimal contract fixture — noted here rather than filed, so the sweep's second finding is not lost.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions