Repository navigation
Commit 3fe9d25
fix(spec): the liveness ledger grades field.settledWhen live (#26918)
<!-- claude-projects-attribution: {"github_login":"os-support-ai"} -->
_Requested by **Yibo Wang** · [project
thread](https://claude.ai/code/project/chan_01BVUyyPie8gHwoPM18iABwB?thread=cmsg_01BVUyyPie8gHwoPM18iABwBGq53dJp4Qhk7xzCoABTvh2)_
Fixes #26727
## What changes
- `packages/spec/liveness/field.json` › `settledWhen`: `planned` →
`live`, `verifiedAt` 2026-10-27, `evidenceScope` `cross-repo` →
`in-repo` (the renderer is `ui/` since #25712). Evidence:
`ui/packages/core/src/evaluator/deadlineSettled.ts#isDeadlineSettled`
(the one host helper), `ui/packages/fields/src/index.tsx#resolveDueLike`
(the date and datetime cells drop overdue wording and colour on a
settled verdict),
`ui/packages/plugin-grid/src/objectGridGenerateColumns.tsx#useObjectGridGenerateColumns`,
`ui/packages/app-shell/src/views/approval-decision/RecordSnapshotSummary.tsx#FieldFace`.
New `producer`: the grid's three column paths and `plugin-detail`
`ENRICHED_FIELD_METADATA_KEYS` copy the key onto cell metadata;
`objectGridRowLoad.ts#useObjectGridRowLoad` and `ListView.tsx#ListView`
fetch the predicate's operands. The note names the other hosts that ask
the same helper (DetailSection, HeaderHighlight, RelatedList,
ObjectKanban, ObjectGallery, ListViewCompact, ObjectTree), each pinned
by its own `deadlineSettled-11815` test. The row had no `authorWarn` /
`authorHint`, so none is dropped.
- Same file › `dueLike` note: its "PARTIAL until objectui#11815 lands"
clause was false (the grid copies the key on all three column paths, and
`DUE_LIKE_FIELD_NAME` is gone). Note only; the status was already
`live`.
- `packages/spec/liveness/state-counts/field.md`: regenerated by
`gen:liveness-counts`.
- `packages/spec/liveness/README.md`: one sentence on the `field` row
recording the flip and its counts.
- `packages/qa/dogfood/test/expression-conformance.ledger.ts` ›
`cel-field-deadline-settled`: `experimental` / `unevaluated` ("NO
EVALUATOR FOUND … objectui @55e90fd has no `settledWhen` read") →
`enforced` / `fail-soft-log`, enforcement naming `isDeadlineSettled →
evalRowPredicate → evalFieldPredicate → celEngine`. A faulting predicate
is warned once per predicate text (`warnPredicateFailure`, via
`evalFieldPredicate`, since `isDeadlineSettled` passes no `warnOnError`)
and answers not settled, which is the `cel-field-rule` tier.
- `.changeset/26727-settled-when-ledger-live.md`: `@objectstack/spec`
patch (the `liveness/` folder ships in the spec tarball).
**`object.tenancy` is already right on main, and this PR leaves it
alone.** The QA's "no `tenancy` row" reading is not true at 2720874:
`object.json` has a `tenancy` container with two children, both `live`
and both checked at this head. `enabled`: `isTenancyDisabled`
(`object.zod.ts`) is called by
`injected-system-columns.ts#resolveInjectedSystemColumns` (withholds
`organization_id`), `sql-driver.ts#computeTenantField` (no driver org
scope) and `security-plugin.ts#getObjectSecurityMeta` (`tenancyDisabled`
posture). `tenantField`: `computeTenantField` honours a declared column
that exists on the object. Like the other container rows here
(`enable`), the container itself carries no status.
**Moved counts:**
- `state-counts/field.md` `field` row: live 99 → 100, planned 6 → 5 (106
classified, unchanged). It counts the `field` ledger rows by verdict,
and one row moved verdict.
- `check:liveness` producer census: live rows citing a producer reads
152 at this head. The `settledWhen` row is the only row that gained a
`producer`, so main reads 151; that is inferred from the diff, not run
on main. This count is not pinned; the gate only reports it.
- No other pin moved. The expression-conformance ledger has no per-state
count pin. Its `unevaluated` pin judges each `unevaluated` row's cell,
and this row has left that set.
No `.describe()` change: the `settledWhen` / `dueLike` describe strings
never said planned. The `content/docs/data-modeling/fields.mdx` deadline
section already describes the live behaviour.
## Why
The ledger tells authors and agents whether a key does anything. A
`planned` grade on a key the console reads makes an agent treat it as
inert. Re-measured on main 2720874, after the QA's 3fcafcd.
## Verification
Clause-②: no
Metadata-protocol: none
_Keep one value on each of the two lines above, each line starting with
its key.
[Human
Minimum](https://github.com/objectstack-ai/objectstack/blob/main/CONTRIBUTING.md#human-minimum)
item 5 says what they mean._
Tests and gates, run on head 1e5831a:
- `pnpm --filter @objectstack/spec check:liveness`: exit 0 (after
`gen:liveness-counts`; before it, the gate reported `field.md` stale
with exactly the 99/6 → 100/5 move above). `check:empty-state`: exit 0.
- spec `vitest run scripts/liveness`: 12 files, 358 tests passed. lint
`lint-liveness-properties.test.ts`: 110 passed.
- dogfood `expression-conformance.test.ts`: 8 passed (with
`@objectstack/verify` built).
- `dispatch-gates --commands`: 59 commands. 58 exit 0, including
`check:generated`, `check:doc-authoring`, `check-adr-0087-registration
--base origin/main` and `check:published-files`.
`check:dual-build-cjs-loads` exits 3: it needs a full repo build, so
nothing was measured. That is not a finding.
## Human Minimum
Each item is one rule from
[CONTRIBUTING.md › Human
Minimum](https://github.com/objectstack-ai/objectstack/blob/main/CONTRIBUTING.md#human-minimum),
which links the AGENTS.md text that states it.
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
- [x] 2. Every name I added uses the casing for its kind.
- [ ] 3. No formatter ran; `pnpm lint` passes. (No formatter ran. `pnpm
lint` was not run locally: the diff is JSON, Markdown and one
string-literal row, so CI's lint decides.)
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset.
- [x] 6. `packages/spec` touched: its generated artifacts are
regenerated and committed.
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English.
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01WGufzgGEj5Qdn1KEGPUrU8)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 7a2818c commit 3fe9d25
5 files changed
Lines changed: 30 additions & 17 deletions
File tree
- .changeset
- packages
- qa/dogfood/test
- spec/liveness
- state-counts
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
219 | 219 | | |
220 | 220 | | |
221 | 221 | | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
226 | 226 | | |
227 | | - | |
228 | | - | |
| 227 | + | |
| 228 | + | |
229 | 229 | | |
230 | | - | |
| 230 | + | |
231 | 231 | | |
232 | | - | |
233 | | - | |
234 | 232 | | |
235 | 233 | | |
236 | 234 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
976 | 976 | | |
977 | 977 | | |
978 | 978 | | |
979 | | - | |
| 979 | + | |
980 | 980 | | |
981 | 981 | | |
982 | 982 | | |
| |||
0 commit comments