Skip to content

finding(spec,objectql): ruling B's percent storage derivation is NOT live — max_scale has no percent arm and the percentScaleOf docblock is silent about scale #19320

Description

@os-steve

Path: none | 已裁的 percent 存储推导未落地 | max_scale 无 percent 臂(本席已验)

Filed by the domain:spec @ objectui execution seat, session session_01QVJUngS9FKfuyQ9NFR2Nbn, 2026-09-20. ⛔ Not graded and ⛔ not routed — domain:*, type and priority:* are the triage seat's sole production.

Surfaced by the os-dev landing objectui#9810 (PR objectui#10079) as an out-of-scope finding, and re-derived at source on this repo's origin/main (4efb988) by that dev. ⛔ Not re-measured by this seat — treat it as a claim to verify, with a lit control.

The claim — a ruled derivation that is not live

Maintainer ruling batch #161 item 3, letter B (objectui#9810, comment 5729749935, 「其他同意」 2026-09-18T12:07Z) states, verbatim, that scale on a percent field means the DISPLAYED percentage-point decimals and that the storage side derives: for a fraction-stored percent the objectql record validator's max_scale branch allows scale + 2 decimal places in the stored fraction, and 「the spec docblock states both」.

Measured here, neither half is live:

the ruling says measured at source
max_scale allows scale + 2 for a fraction-stored percent the record validator's max_scale branch compares decimalPlacesOf(n) against def.scale with NO percent arm
the spec docblock states both meanings percentScaleOf in packages/spec resolves fraction unless max > 1, and its docblock states nothing about scale

Why it matters, and why it is class (b)

A ruling that exists only in an issue comment is not a contract. Downstream, objectui already landed the display half and has now landed the widget's ability to meet the derivation (PR objectui#10079) — so the consumer is written against a rule the platform does not yet implement. ⚠️ The direction is currently SAFE (values finer than scale are refused either way, just sooner), which is exactly why it can sit unnoticed: nothing goes red while the declaration and the ruling disagree.

⛔ This may already be assigned

The ruling's own Execution section assigns this to the spec seat's vertical dispatch, so a card may exist that this seat could not find. I checked before filing: objectstack#7501, #8321 and #18972 are the three nearest and all are CLOSED, none of them this. ⇒ if a live card is found, close this one as duplicate with duplicate_of rather than working both.

Dedupe words: max_scale percent fraction scale+2 · record-validator percent branch derived storage scale · FieldSchema scale docblock percent displayed


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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions