Repository navigation
fix(plugin-list,app-shell,console): settle a declared deadline in the list view's projection and the approval snapshots (objectui#11815) - #12879
Conversation
… list view's projection and the approval snapshots ListView's $select harvest now asks for a shown declared deadline's settledWhen operands through addSpeculative, so a list that hides the predicate's field still judges its done rows as settled. The two approval snapshot faces pass deadlineSettled, judged against the snapshot they draw. Claude-Session: https://claude.ai/code/session_01DiTjG1AEXG49VTNoVQ5cpt Co-authored-by: Claude <noreply@anthropic.com>
…ion and snapshot faces; docs and changesets Claude-Session: https://claude.ai/code/session_01DiTjG1AEXG49VTNoVQ5cpt Co-authored-by: Claude <noreply@anthropic.com>
… build accepts the pin Claude-Session: https://claude.ai/code/session_01DiTjG1AEXG49VTNoVQ5cpt Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
…ell line Claude-Session: https://claude.ai/code/session_01DiTjG1AEXG49VTNoVQ5cpt Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
席位核对 — ACCEPT · objectui#11815 (remainder) · head
|
main f34e877 |
this branch | |
|---|---|---|
$select |
id,title,due_date,status,priority,done |
adds progress |
| App wireframes (done) | 逾期 6 天, red | 6天前, neutral |
| Audit current IA (done) | 9月29日, red | 9月29日, neutral |
Approval faces live: not measured, because no showcase approval process targets an object that declares a deadline. The unit pins cover them.
Screenshots, read by the seat (never-merged claude/issue-11815b-evidence at be335f3): rows 6 and 9 are red on main and neutral on the branch, and every other row is unchanged. Sent to the maintainer at 2026-10-17T11:35Z.
Tests:
ListView.deadlineSettledSelect-11815, 4 cases:$selectcarriesstatuswhen only the deadline is shown;- against a backend that honours
$select, a done row reads neutral and an open row overdue; - CONTROL: an undeclared date with a
settledWhenpulls nothing in; - CONTROL: an operand the viewer may not read is not requested.
RecordSnapshotSummary.test+2 andApprovalsInboxPage.deadlineSettled-118153: a settled snapshot draws neutral, an open one overdue. CONTROL: an undeclared past date is never overdue.- Five ablations, each red and each restored.
- Full runs:
- plugin-list: 1518 passed;
- the approval-decision and inbox files: 138 passed;
scripts/__tests__/: 5620 passed.
- Builds,
type-checkfor all three packages, the i18n checks, changeset presence and no-major, andcheck:new-line-citationsall exit 0.
CI: running on 78ade7d. Landing waits for green.
Rulings
- Channel: A, as taken. The dispatch's degraded channel stands over
os-dev.md's self-opened PR while the relay refuses this container (403). The seat opened the PR and relayed the report, and no write went through MCP. - No showcase view for the live lane: A. The unit pins cover the mechanism. A showcase view built only to expose the gap would be objectstack metadata with no consumer, and the gap fails toward a visible false overdue, not a hidden one.
- The live recipe's scratch-fixture edit is accepted as evidence. It touched a scratch copy only, never a repository, and the report gives both readings: on the stock showcase, where
mainand the branch cannot be told apart, and on the edited copy, where the new loop is what differs.
Implemented-by: cloud session session_01DiTjG1AEXG49VTNoVQ5cpt, branch claude/issue-11815-settled-remainder
Generated by Claude Code
Landing · head
|
Fixes #11815
Clause-②: no
The remainder of ruling D after #12874 (
f34e877): the two hosts that PR measured and left outside its surface.What changed
packages/plugin-list/src/ListView.tsx): the$selectharvest gains one loop right afteraddSpeculative(rowColorConfig?.field). For each shown column (after the FLS filter) whose object field declaresdueLike: truewith asettledWhen, it runsaddSpeculativeon every operandcollectPredicateFieldRefsfinds. That is the same declared-field and FLS gate every binding there uses. A list that hides the predicate's field now fetches it, so its done rows read as settled. An operand the viewer may not read is never requested, and that deadline stays unsettled (it fails toward overdue).apps/console/.../ApprovalsInboxPage.tsx,RecordFieldFace): passesdeadlineSettled = isDeadlineSettled(def, snapshot, { scope, fields }).packages/app-shell/.../RecordSnapshotSummary.tsx,FieldFace): the same call.content/docs/fields/date.mdx): the "show that field as a column" caveat now describes what the code does.What each approval face holds as its snapshot
ApprovalsInboxPage: the request row'spayload, the object both the summary rows and the lead amount draw their values from.fieldsis the indexed object metadata.RecordSnapshotSummary:withoutDeniedFields(payload, perms, object), the FLS-redacted values the face draws. A status the reader may not read is absent, so that deadline stays unsettled.The snapshot's date and status were frozen together, so judging the snapshot's own state is the consistent reading.
Live (showcase via
e2e/live/ci/start-backend.sh,@objectstack/cli18.0.0-next.2, zh-CN)mainalready sendsstatus:showcase_task's row-action predicates projectstatus,priorityanddonethrough the existing predicate harvest. So the stock metadata cannot tellmainfrom this branch.due_date'ssettledWhenatrecord.progress == 100. The done rows carry progress 100, and nothing else projectsprogress.mainf34e877$selectApproval faces live: not measured. No showcase approval process targets an object that declares a deadline, so the unit pins below cover them.
Screenshots (never-merged
claude/issue-11815b-evidence)Tests (at
6ae5c25)ListView.deadlineSettledSelect-11815:statusis in$selectwhen the view shows the deadline but notstatus. Against a backend that honours$select, a done row reads neutral and an open row overdue. CONTROL: an undeclared date with asettledWhenpulls nothing in. CONTROL: an operand the viewer may not read is not requested.RecordSnapshotSummary.testandApprovalsInboxPage.deadlineSettled-11815: a snapshot whosesettledWhenholds draws its past deadline neutral; one where it does not draws it overdue. CONTROL: an undeclared past date is never overdue.git diff HEADempty.scripts/__tests__/5620 passed, 2 skipped.buildandtype-checkpass for plugin-list, app-shell and console.check:i18n-keys,check:i18n-drift, changeset presence, no-major andcheck:new-line-citationsall exit 0.Deviations
patch: a fix with no exported type, prop or i18n key moving.Session:
https://claude.ai/code/session_01DiTjG1AEXG49VTNoVQ5cptGenerated by Claude Code