You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec liveness ledger drift: field.settledWhen is graded planned but is live (the console overdue colour reads it); object.tenancy has no ledger row #26727
Filing gate: ① product defect, reproduced, landing site named.
Batch-of: studio-qa-2026-10-27 — 39 cards from one Studio QA run (coordinator session session_01J8VVAkZns5rNnK2rtszzbQ; tested at 3fcafcd3; origin/main was 43731031 at filing, so the implementer re-checks the landing site on current main). The run record is the qa-run issue filed with this batch.
Symptom
The ledger is what tells authors and agents whether a key does anything; two rows disagree with the measured runtime.
Reproduction
A date field with dueLike and a settledWhen predicate: the predicate controls whether the overdue colour is shown in the console (measured by the data gap-fill card). The ledger row says planned.
packages/spec/liveness/object.json has no tenancy row although tenancy: {enabled:false} removes the organization_id column.
Expected
settledWhen graded live with its consumer named; tenancy given a row.
p2: liveness ledger drift: field.settledWhen is graded planned but is live, and object.tenancy has no row. Re-grade from measured readers, and add the row with its evidence. From the studio-qa-2026-10-27 batch. Re-check the landing site on current main.
Claim: PM loop round 1 · 2026-10-27T20:44Z
Session: session_01WGufzfhobWEgUUrjz4rrbh
Account: os-support-ai
Branch: claude/project-thread-n1f3av (card thread session_01WGufzgGEj5Qdn1KEGPUrU8. The platform assigns the thread's branch and the thread can push only that one, so the branch is written as measured instead of claude/issue-26727-<slug>.)
Worktree: objectstack-issue-26727
Domain: domain:spec
Seat: domain:spec#1
File surface:
packages/spec/liveness/field.json: the settledWhen row is flipped to live, with its in-repo readers as evidence (isDeadlineSettled in ui/packages/core/src/evaluator/deadlineSettled.ts, and the grid, kanban, detail and approval surfaces that hand its verdict to the date cell renderers).
packages/qa/dogfood/test/expression-conformance.ledger.ts: the stale "no evaluator found" prose on the settledWhen row is corrected.
Any pinned count the flip moves, with what each measures stated in the PR.
A root .changeset entry, or skip-changeset if nothing publishes.
object.tenancy already has a row on main2720874a: enabled and tenantField are both live, and their evidence holds. That half is reported as already right and is not edited. Stop on a breach and explain it in the report.
Container & model: M, mode:thread, model: TIER_DEFAULT, effort: high
Clause-②: no. A ledger correction; no accept set changes.
Metadata-protocol: none
Responsibility: n/a. A Studio QA finding (studio-qa-2026-10-27, L1).
Thread-read: 6447056953
Premise: half held at origin/main2720874a, as measured by the dev. settledWhen is graded planned while isDeadlineSettled reads it. The tenancy half no longer holds: the row exists.
Serial constraints cleared: yes. No other seat-1 card edits field.json. Whichever lands second regenerates the state counts after merging main.
Ruling-ref: none — triage 6447056953
{
"issue": 26727,
"status": "done",
"branch": "claude/project-thread-n1f3av",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26918",
"session": "session_01WGufzgGEj5Qdn1KEGPUrU8",
"premise_still_valid": true,
"summary": "Re-measured on main 2720874a (QA ran at 3fcafcd3). (1) field.settledWhen: premise valid. The row said planned with no reader in either repo, but ui/packages/core/src/evaluator/deadlineSettled.ts#isDeadlineSettled (objectui#11815) evaluates it per row, and every date-cell host hands the verdict to fields' resolveDueLike as deadlineSettled: the grid, list, gallery, compact list, kanban, tree, the record detail sections and the approval snapshot. Each is pinned by a deadlineSettled-11815 test. The row is now live, in-repo scope, verifiedAt 2026-10-27, with evidence and producer anchors. It had no authorWarn/authorHint to drop. The sibling dueLike note's stale 'PARTIAL until objectui#11815' clause is corrected, note only. The dogfood expression-conformance row cel-field-deadline-settled goes from experimental/unevaluated to enforced/fail-soft-log, naming the evaluator chain. No .describe() said planned, so none changed. (2) object.tenancy: already right on main, left alone. object.json has a tenancy container whose two children are live. enabled is backed by isTenancyDisabled -> resolveInjectedSystemColumns (organization_id withheld), sql-driver computeTenantField and plugin-security getObjectSecurityMeta. tenantField is backed by computeTenantField. Each anchor was checked at this head. The QA's 'no row' reading does not hold, because the container row carries children and no status of its own, as 'enable' does. Changeset: @objectstack/spec patch in the root .changeset, Clause-②: no, Metadata-protocol: none.",
"moved_counts": "state-counts/field.md field row: live 99 -> 100 and planned 6 -> 5, with 106 classified (field ledger rows by verdict). check:liveness producer census: 152 live rows cite a producer at this head; main reads 151, inferred from the diff and not run on main; this count is reported, not pinned. No other pin moved.",
"tests": "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). check:empty-state exit 0. spec vitest scripts/liveness: 12 files, 358 passed. lint lint-liveness-properties.test.ts: 110 passed. dogfood expression-conformance.test.ts: 8 passed. Head 1e5831a5.",
"gates": "dispatch-gates --commands: 59 commands, 58 exit 0, including spec check:generated, check:doc-authoring, check-adr-0087-registration --base origin/main and check:published-files. check:dual-build-cjs-loads exited 3, because it needs a full repo build, so nothing was measured. PR check-runs had not been awaited at report time.",
"dogfood_battery": "not run in full; only expression-conformance.test.ts, the one dogfood file the diff touches",
"mcp_calls": "4 writes: create_pull_request #26918 (draft), issue_write (assignee os-support-ai), this comment, and update_pull_request with a reviewer request, which was refused because the PR author cannot be requested as reviewer",
"api_writes": "1 git push, plus the MCP writes above",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — packages/qa/dogfood/test/expression-conformance.test.ts's comment says 'five honest unevaluated rows'. That was already stale before this PR (seven on main, six now). It is comment prose with no pin, so it was left alone."
]
}
PR #26918 merged at 3fe9d25a, which is an ancestor of origin/main. On all 5 paths the PR touched, the merge tree matches the accepted head 39caaea3 byte for byte.
The liveness ledger now grades field.settledWhen live, with isDeadlineSettled in @object-ui/core as its evidence. A settled deadline stops painting overdue in the grid, kanban, detail and approval date cells. The field state counts move to live 100 and planned 5. The dogfood row cel-field-deadline-settled is enforced / fail-soft-log: a predicate that faults is warned once per predicate text by warnPredicateFailure and answers not settled. object.tenancy already had a correct live row, so it is unchanged.
@objectstack/spec is patch. Clause-②: no and Metadata-protocol: none. The card closed through Fixes #26727, and this seat removes pm:dispatched.
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
priority:p2·domain:spec·area:devpath·pm:queue(findingremoved) · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T16:08Z⛔ Not a claim, ⛔ not a dispatch.
field.settledWhenis gradedplannedbut is live, andobject.tenancyhas no row. Re-grade from measured readers, and add the row with its evidence. From the studio-qa-2026-10-27 batch. Re-check the landing site on currentmain.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1 · 2026-10-27T20:44Z
Session:
session_01WGufzfhobWEgUUrjz4rrbhAccount:
os-support-aiBranch:
claude/project-thread-n1f3av(card threadsession_01WGufzgGEj5Qdn1KEGPUrU8. The platform assigns the thread's branch and the thread can push only that one, so the branch is written as measured instead ofclaude/issue-26727-<slug>.)Worktree:
objectstack-issue-26727Domain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/liveness/field.json: thesettledWhenrow is flipped tolive, with its in-repo readers as evidence (isDeadlineSettledinui/packages/core/src/evaluator/deadlineSettled.ts, and the grid, kanban, detail and approval surfaces that hand its verdict to the date cell renderers).packages/spec/liveness/state-counts/: regenerated.packages/qa/dogfood/test/expression-conformance.ledger.ts: the stale "no evaluator found" prose on thesettledWhenrow is corrected..changesetentry, orskip-changesetif nothing publishes.object.tenancyalready has a row onmain2720874a:enabledandtenantFieldare bothlive, and their evidence holds. That half is reported as already right and is not edited. Stop on a breach and explain it in the report.Container & model:
M,mode:thread,model: TIER_DEFAULT,effort: highClause-②: no. A ledger correction; no accept set changes.
Metadata-protocol: none
Responsibility: n/a. A Studio QA finding (studio-qa-2026-10-27, L1).
Thread-read: 6447056953
Premise: half held at
origin/main2720874a, as measured by the dev.settledWhenis gradedplannedwhileisDeadlineSettledreads it. Thetenancyhalf no longer holds: the row exists.Serial constraints cleared: yes. No other seat-1 card edits
field.json. Whichever lands second regenerates the state counts after mergingmain.Ruling-ref: none — triage
6447056953os-support-ai commentedon Oct 27, 2026
os-dev report: #26727 → PR #26918 (draft)
{ "issue": 26727, "status": "done", "branch": "claude/project-thread-n1f3av", "pr": "https://github.com/objectstack-ai/objectstack/pull/26918", "session": "session_01WGufzgGEj5Qdn1KEGPUrU8", "premise_still_valid": true, "summary": "Re-measured on main 2720874a (QA ran at 3fcafcd3). (1) field.settledWhen: premise valid. The row said planned with no reader in either repo, but ui/packages/core/src/evaluator/deadlineSettled.ts#isDeadlineSettled (objectui#11815) evaluates it per row, and every date-cell host hands the verdict to fields' resolveDueLike as deadlineSettled: the grid, list, gallery, compact list, kanban, tree, the record detail sections and the approval snapshot. Each is pinned by a deadlineSettled-11815 test. The row is now live, in-repo scope, verifiedAt 2026-10-27, with evidence and producer anchors. It had no authorWarn/authorHint to drop. The sibling dueLike note's stale 'PARTIAL until objectui#11815' clause is corrected, note only. The dogfood expression-conformance row cel-field-deadline-settled goes from experimental/unevaluated to enforced/fail-soft-log, naming the evaluator chain. No .describe() said planned, so none changed. (2) object.tenancy: already right on main, left alone. object.json has a tenancy container whose two children are live. enabled is backed by isTenancyDisabled -> resolveInjectedSystemColumns (organization_id withheld), sql-driver computeTenantField and plugin-security getObjectSecurityMeta. tenantField is backed by computeTenantField. Each anchor was checked at this head. The QA's 'no row' reading does not hold, because the container row carries children and no status of its own, as 'enable' does. Changeset: @objectstack/spec patch in the root .changeset, Clause-②: no, Metadata-protocol: none.", "moved_counts": "state-counts/field.md field row: live 99 -> 100 and planned 6 -> 5, with 106 classified (field ledger rows by verdict). check:liveness producer census: 152 live rows cite a producer at this head; main reads 151, inferred from the diff and not run on main; this count is reported, not pinned. No other pin moved.", "tests": "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). check:empty-state exit 0. spec vitest scripts/liveness: 12 files, 358 passed. lint lint-liveness-properties.test.ts: 110 passed. dogfood expression-conformance.test.ts: 8 passed. Head 1e5831a5.", "gates": "dispatch-gates --commands: 59 commands, 58 exit 0, including spec check:generated, check:doc-authoring, check-adr-0087-registration --base origin/main and check:published-files. check:dual-build-cjs-loads exited 3, because it needs a full repo build, so nothing was measured. PR check-runs had not been awaited at report time.", "dogfood_battery": "not run in full; only expression-conformance.test.ts, the one dogfood file the diff touches", "mcp_calls": "4 writes: create_pull_request #26918 (draft), issue_write (assignee os-support-ai), this comment, and update_pull_request with a reviewer request, which was refused because the PR author cannot be requested as reviewer", "api_writes": "1 git push, plus the MCP writes above", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — packages/qa/dogfood/test/expression-conformance.test.ts's comment says 'five honest unevaluated rows'. That was already stale before this PR (seven on main, six now). It is comment prose with no pin, so it was left alone." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed ·
domain:specseat 1 (#6017) · sessionsession_01WGufzfhobWEgUUrjz4rrbh· 2026-10-27T22:29ZPR #26918 merged at
3fe9d25a, which is an ancestor oforigin/main. On all 5 paths the PR touched, the merge tree matches the accepted head39caaea3byte for byte.The liveness ledger now grades
field.settledWhenlive, withisDeadlineSettledin@object-ui/coreas its evidence. A settled deadline stops painting overdue in the grid, kanban, detail and approval date cells. The field state counts move to live 100 and planned 5. The dogfood rowcel-field-deadline-settledisenforced/fail-soft-log: a predicate that faults is warned once per predicate text bywarnPredicateFailureand answers not settled.object.tenancyalready had a correct live row, so it is unchanged.@objectstack/specis patch.Clause-②: noandMetadata-protocol: none. The card closed throughFixes #26727, and this seat removespm:dispatched.