Skip to content

Re-run #31's unlock probe on 17.4.0 — its criterion may already be met and nobody has looked #80

Description

@zhuangjianguo

Observation only. This card produces NO code and NO pull request. Its deliverable is a measurement and a report. ⛔ Do not fix anything you find, do not add a field, do not touch DESIGN.md, and ⛔ do not change #31's labels — the seat does that after reading your report.

Why now

Decision #31 is pm:blocked, and it states its own unlock criterion verbatim in its header:

解锁判据是消费方可安装(本仓升到含该修复的版本后那条错路确实报错),⛔ 不是「上游 PR 已合并」。

This repository upgraded to @objectstack/* 17.4.0 this session — PR #37, merged as 5d5a254. Nobody has re-run the probe since. A blocked card whose blocker may have cleared is the failure mode that keeps a decision parked forever, because the condition changes silently and no event fires.

The comment block in src/datasets/cycle-time.dataset.ts makes the same gap visible from the other side: it names its measurement's versions honestly — 「Measured on @objectstack/spec 17.3.0 + @objectstack/service-analytics 17.3.0」 — so a 17.4.0 decision is currently resting on a 17.3.0 reading. ⚠️ That the comment names its versions is correct practice and is the only reason this is visible at all; ⛔ it is not a defect and is not to be "fixed".

The probe, which #31 already specifies

#31 records the exact wrong path and what it did on 17.3.0:

derived: { op: 'difference', of: [avg_activated, avg_submitted] }
  → parsed, ran, rendered  -0.849999999999909

and why:

sqlite> select typeof(submitted_at), submitted_at from clm_contract limit 1;
text|2026-05-19T00:00:00.000Z
sqlite> select avg(submitted_at) from clm_contract;
2025.9166666666667          ← the average YEAR, not the average date

Establish, on 17.4.0, whether that path now errors. Concretely:

  1. Does derived: { op: 'difference', … } over two datetime averages still parse, run and render a number — or does it now refuse, and at which layer (author-time validate, query build, or execution)?
  2. Does AVG() over a Field.datetime still return an average year, or does the analytics layer now refuse the aggregate?
  3. Whichever answer: what exactly does the operator see? An exception, a validation message, an empty widget, or a number. [Decision] §09 要「各段时长」和「超 SLA」,但语义层算不出时间差——两问共用一个补法 #31's whole argument is that the dangerous state is a clean, plausible, wrong number, so "it errors" and "it renders nothing" are different outcomes and both differ from "it still lies".

Use a scratch dataset in your own worktree. ⛔ Do not commit it — restore and prove the tree byte-identical by state (git diff HEAD empty, git hash-object matching git rev-parse HEAD:<path>), the way PR #70, #72, #74 and #79 did.

What the answer means — ⛔ do not decide this yourself

Constraints

  • ⛔ No code, no PR, no DESIGN.md, no label changes. Report as a comment on this issue.
  • ⛔ Do not re-open the 1A/2A vs 1B/2B question. That was adjudicated 1C by the maintainer on 2026-09-09 and §09 already records the outcome (PR Record four maintainer rulings in DESIGN.md §03, §06 and §09 #40, 1127e52). You are measuring one fact, not revisiting a ruling.
  • ⛔ Platform gaps: report, never patch. If you find a new platform defect, say so — the seat routes it upstream.
  • Name the exact versions you measured on, the way the existing comment does. That practice is why this card exists.

Acceptance

  • A direct answer to each of the three questions, with the reading that produced it — the request or config that was run, and the raw output. ⛔ Not a summary of what you expect.
  • The versions installed at measurement time, read from the tree rather than assumed.
  • Whether the tree is byte-identical afterwards, proved by state.
  • If the probe cannot be run at all, say why in the same detail — an unrunnable probe is a finding, not a failure.

Provenance

Noticed by the PM seat while reviewing PR #79 (#75), which quotes #31's unlock criterion inside a comment it was reframing. The dev on #75 correctly did not chase it — it was out of that card's scope. ⚠️ The seat should have noticed at the 17.4.0 upgrade (PR #37) that a blocked card's condition might have moved; it did not, and this card is that catch-up.

Related

#31 (pm:blocked, the card this is for) · #37 / 5d5a254 (the 17.4.0 upgrade) · objectstack-ai/objectstack#16737 (the blocker) · objectstack-ai/objectstack#16778 (the in-flight fix that refuses rather than provides) · #75 / PR #79 (where this surfaced) · src/datasets/cycle-time.dataset.ts (the 17.3.0 measurement)

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions