Uh oh!
There was an error while loading. Please reload this page.
feat(spec): add the map visualization config block to ListViewSchema - #9370
Conversation
…9340) The eighth per-visualization block, isomorphic to the seven ruled siblings. ListMapConfigSchema declares the map renderer's documented read surface (latitudeField/longitudeField/locationField/titleField/descriptionField/ zoom/center), strict, no defaults (declared camera wins; no declaration => renderer fits the queried records). Showcase task map view now declares titleField: 'title' + locationField: 'location'. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fs18A2DdXLVN2h8PaaFBcP
📓 Docs Drift CheckThis PR changes 1 package(s): ⛔ 1 release-owned page(s) name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 113 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop):
|
Uh oh!
There was an error while loading. Please reload this page.
…dvisory, loudly The `Flag docs affected by code changes` job died four consecutive times on PR #9370 (2026-08-17, 17:17Z-18:24Z) with a 503 from `/repos/.../issues/9370/comments`. actions/github-script routes any throw from the inline script to `main().catch(handleError)` -> `core.setFailed(...)`, so a degraded GitHub API turned an advisory-only check red and cost four re-runs that no local change could have fixed. Delivery of the advisory comment now retries a bounded, narrow transient class (5xx, 429, 403 carrying a secondary-rate-limit signature, and network-level codes) and, once the retries are spent, degrades VISIBLY instead of failing: a warning annotation plus a job summary that names the failed call, states that the run's verdict is NOT on the pull request, warns that any advisory comment shown there is from an earlier push, and reproduces the verdict it did compute. The tolerance is scoped to delivery only. A malformed `affected.json`, a 422 over-long body, a plain 403 permission denial and any non-HTTP error still fail the job — swallowing those would let "could not tell" render as "no drift", which is the same defect wearing the opposite mask. Fixes#9373 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XqDQYVU5smx29ts9pAErja
Fixes#9340
Cross-repo transfer of objectui#5001 (spec-side by that card's ruling):
ListViewSchemais strict and declared seven per-visualization config blocks but nomapblock, so atype: 'map'list view could not declare its field mapping or camera at all. The showcase task map fell back to the renderer'stitleFielddefaultname— an object with onlytitle— so every marker title renderedundefined.What landed
ListMapConfigSchema(packages/spec/src/ui/view.zod.ts) — the eighth visualization block, registered asmaponListViewSchemabeside the seven siblings. Key set anchored in two measurements, both quoted in the schema's JSDoc:plugin-map's actual read surface:getMapConfiginObjectMap.tsxvalidatesschema.mapagainst a local zod schema with exactlylatitudeField/longitudeField/locationField/titleField/descriptionField/zoom/center, each with a live read in the renderer (coordinate extraction, marker title/description, camera init); the same seven keys are the documented surface incontent/docs/plugins/plugin-map.mdx. No key without a live read was admitted.strictObjectwith surface name +VIEW_HISTORY,.describe()per key, edit-distance prescription on unknown keys.schema.mapand drops extras), so passthrough here would silently strip nothing-reads-this keys. A misspelling is now a loud parse error.zoom/center, deliberately — objectui#5000 ruled "declared camera wins, no declaration means fit to the queried records"; a spec-side default would read as a declared camera and defeat the fit. Consequently the alias is isomorphic and pinned (Iso851, count 837 to 838 with receipt) intype-alias-convention.pin.test.ts.MapConfigSchema— the automationmapflow-node config (automation/builtin-node-config.zod.ts) already exports that name; same collision, same resolution asListChartConfigSchemavschart.zod.ts'sChartConfigSchema.check:dual-source-exportsis why this matters.view.test.ts): accept cases (full seven-key surface, the exact showcase shape, empty config with no defaults applied), strict refusal asserting prescription substance (surface name + offending key echoed +titleFieldsuggestion + verbatim history sentence, both standalone and nested insideListViewSchema), and value-level refusals (zoom outside 1-20, center arity/type).liveness/view.json+ README row):maprecordedplanned, deliberately notlive— the component-level reader exists (ObjectMap.tsx readsschema.map) but objectuiListView.tsxcase 'map'forwards onlyschema.options?.map, never the view-level block, so authoring the key changes nothing at runtime until the pre-registered objectui consumer card lands the forwarding (measured against the objectui checkout current today).VIEW_BINDING_BLOCKSinfunctional-completeness.tswas deliberately NOT extended — it is Tier-A verify-then-enforce (timeline/tree are likewise excluded).examples/app-showcase/src/ui/views/task.view.ts): pure metadata addition demonstrating the block —map: { titleField: 'title', locationField: 'location' }on the map view, plus the now-stale "map needs a spec MapConfigSchema" comment corrected.allowedVisualizationsuntouched (switcher wiring is the objectui follow-up).check:generated --fix:api-surface/ui.json,authorable-surface/ui.json,export-origins/ui.json,json-schema.manifest/ui.json,content/docs/references/**, strictness-ledger counts, liveness state-counts.@objectstack/specminor (accepted-set expansion; not breaking, so no ADR-0087 marker required —check:adr-0087-registrationgreen).Verification (all at
dd2cb8d1d)pnpm --filter @objectstack/spec test— 408 files / 10880 tests passed (re-run post-commit at this head).pnpm --filter @objectstack/spec typecheck,check:generated(all 13 current),check:liveness— green.pnpm --filter @objectstack/example-showcase validate && typecheck— green (pre-existing unrelated warnings only).view.zod.tsturns exactly the 8 new tests red (missing export +maprefused onListViewSchema); restoring the branch file returns them green. Direction observed: red, as predicted.Out of scope
The objectui consumer wiring (ListView forwarding
view.mapto plugin-map, switcher inclusion) is the pre-registered follow-up card the PM files on landing — objectui#5001 remains closed as transferred; #9340 remains the tracking card until merge.Generated by Claude Code