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
map view: the tile style is hard-wired to demotiles.maplibre.org, so an intranet or proxied deployment gets a grey canvas and an English "Map failed to load … configure a custom map style for production use" with nowhere to configure it #25889
Filing gate ① a user-visible defect with a named landing site (the message itself says production needs a setting that does not exist). Batch-of: 2026-10-25 browser pass on @objectstack/* 18.1.0 (23 cards: hotcrm 10, objectui 10, objectstack 3). Filed by the maintainer's account (os-steve) from the HotCRM pass driven in session session_01AwpXhq2nFKU6J7GmbCEmZu; ⛔ not a claim. Grade and routing are objectui triage's; the setting half may be an objectstack Setup card.
What is seen (@objectstack/console 18.1.0, outbound network blocked)
HotCRM → 客户 → 客户地图: the markers render on a grey canvas; above it, in English on a zh-CN console:
Map failed to load (AJAXError: Failed to fetch (0): https://demotiles.maplibre.org/style.json). Markers below are still listed in the search box; configure a custom map style for production use.
plus 「1 record with missing or invalid coordinates excluded from the map.」, also English. 92-account-map.png.
reach: the public UI, measured once; every deployment without public internet, and every one whose policy forbids a third-party tile host, meets it.
Expected
A deployment-level map style setting (Setup → 配置, next to File Storage / AI), read by the map renderer; the demotiles URL stays the development default.
When the style fails to load, the view degrades to the marker list with a translated one-line message, and the two notices go through the bundle.
Dedupe
MCP search_issues objectui "map view tiles demotiles maplibre style configurable offline failed to load" → 2 hits: objectstack-ai/objectui#11819 (closed, WebGL2 crash instead of the fallback) and objectstack-ai/objectui#3297 (closed, worker 404); neither adds a style setting or translates the notices. Report: REPORT.md §3.11.
⛔ Not a claim, ⛔ not a dispatch. finding comes off.
The tile style should come from configuration, with a translated failure message. If that needs a new settings or spec key, the key is a separate objectstack domain:spec card filed first.
Transferred 2026-10-26T02:50Z from objectstack-ai/objectui#13525, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.
Paths. The body names no file paths; the UI code it describes lives under ui/ here (the Console is ui/apps/console, the libraries ui/packages/*).
Claim: PM loop round 1 · 2026-10-26T08:33Z
Session: session_01SMps7wq7rBTk53e8KTSEup (the seat; the card thread that implements it works on the branch below)
Account: os-steve
Branch: claude/project-thread-tvk6g5 (platform-assigned card-thread branch; a card thread can push only its assigned branch and the name carries no card number, so this claim is the identity record)
Worktree: objectstack-project-thread-tvk6g5
Domain: domain:ui
Seat: domain:ui#2
File surface: ui/packages/plugin-map/src/ObjectMap.tsx (the style-failure alert, the invalid-coordinate notice, the mapStyleError state and the WebGL2 marker-list fallback it reuses) and plugin-map tests; ui/packages/i18n/src/locales/*.ts (append new element.map.* keys only); scripts/sdui-manifest.record.json (re-record); root .changeset/25889-map-style-failure-notice.md (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are out of bounds (maintainer's word).
Container & model: M, mode:thread, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectstack: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: the map renderer's own hard-coded English notices and its alert-over-map failure mode | the per-view mapStyle exists; no deployment-wide default | every deployment without public internet, through the public UI
Thread-read: 6407136555
Premise: corrected 2026-10-26T08:25Z — item 1 (translated notice, degrade to the marker list) holds on origin/main05f7758f05; item 2 (a deployment-wide style setting) needs a new settings/runtime-config key and a Console CSP change, so it is split to #26001 and this claim is item 1 only: the PR body line 1 is Part of #25889
Serial constraints cleared: ui/packages/i18n/src/locales/*.ts — seat 1's #25916 and #25898 append keys there in parallel; append-only here too, the later lander merges main. No claim holds ObjectMap.tsx.
Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.
Mechanism assumption (measure it): a style/tile failure keeps the map mounted with an English alert that claims the markers are "listed in the search box"; the WebGL2 path already renders a marker list.
Suggested route: degrade to the marker list on a style/tile failure, translate the notices with inline English defaults, drop the false sentence, promise no Setup setting; test the unmount path.
{
"issue": 25889,
"status": "done",
"branch": "claude/project-thread-tvk6g5",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26048",
"session": "session_01HUu4jGnAzZqaB5qTG2fsX4",
"premise_still_valid": true,
"summary": "Item 1 only (Part of #25889; item 2 is #26001). Measured on 05f7758f: a MapLibre error event kept MapGL mounted with an English alert claiming the markers were listed in the search box and asking for a production style setting that does not exist. Now the error unmounts MapGL and renders the existing WebGL2 record list (testid map-style-fallback, searchable, rows take the marker click path) with a retry button; the alert keeps MapLibre's reason and names a real remedy (check this view's style URL, or ask an administrator to set a map style for this view). The style alerts, WebGL2 alert, list label and empty text, retry button and the excluded-coordinates count go through useObjectTranslation with inline en defaults; eight element.map keys appended to all ten packs, the count written Label: N so no plural family.",
"tests": "At head 79dcecfd (main merged at 39a78b15, manifest re-recorded after): vitest packages/plugin-map/ + packages/i18n/ under the lock, Test Files 129 passed (129), Tests 1627 passed, 13 skipped; plugin-map alone at f4d90cad 42 files / 274 tests. New: ObjectMap.styleFailureList-25889.test.tsx (9 cases incl. map removed exactly once, retry remounts, unmount after the swap removes nothing twice and reaches no error boundary) and ObjectMap.noticesI18n-25889.test.tsx (real I18nProvider zh-CN). Flipped webgl2Controls-11819 style case; webgl2Fallback-11819 gains no-retry. Reverse run at f4d90cad with the base ObjectMap.tsx restored under a trap (restore proven by blob hash): 3 files red, 11 failed / 2 passed. type-check plugin-map and i18n: 0 errors, both new test files in the test program (--listFiles). NOT MEASURED: a real started MapLibre map removed after a style failure in a browser (happy-dom has no WebGL2; the stub cleanup stands in).",
"gates": "Local at 79dcecfd: dispatch-gates --commands derived 46 families, each run with exit captured before any pipe, all exit 0; --ran reconciliation: 46 derived, 46 run, 0 NOT-MEASURED (derived zero). ui scripts check-i18n-call-site-keys, check-i18n-en-drift, check-i18n-dead-keys: exit 0. node scripts/check-sdui-manifest.mjs: exit 0 after re-record. eslint over touched files: 0 errors (pre-existing warnings only). PR check-runs: in_progress at report time, not awaited.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 — no MCP GitHub calls",
"api_writes": "2 — relay pr_create (POST pulls + POST issues/26048/assignees, one relay action) and this os-dev-report comment via post-stamped (POST issues/25889/comments); git push is not a REST write",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — the same map view still renders English literals: search placeholder, Loading map..., geolocation button label and its two error strings, popup Edit/Delete, mobile sheet labels, overlay title Location Details (listed in the PR Acceptance notes)",
"carrier: seat 2 · file surface: ui/packages/i18n/src/__tests__/ariaLabelLiteralCensus-12145.test.ts was edited outside the claim's declared surface — a one-word deletion (Locations) the frozen backlog census requires in the commit that translates that aria-label"
]
}
File surface (added): ui/packages/i18n/src/__tests__/ariaLabelLiteralCensus-12145.test.ts, a one-word deletion only (Locations leaves the plugin-map row of the frozen literal-aria-label backlog). The census forces it in the same commit that translates that label, which this card does. Four checks pass: it is the same defect class (an untranslated literal), the change is mechanical, no other claim holds the file, and it belongs to the same i18n gate family.
Status: item 1 (translated failure notice, degrade to the marker list) is done. Item 2 (a deployment-wide style setting) was split to #26001, which carries it from here. Closing as completed; pm:dispatched comes off.
Activity
objectstack-fleet commentedon Oct 25, 2026
Triage: first grade —
bug·priority:p2·domain:ui·area:records·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T13:00Z⛔ Not a claim, ⛔ not a dispatch.
findingcomes off.domain:speccard filed first.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Transferred 2026-10-26T02:50Z from objectstack-ai/objectui#13525, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the
ui/workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.Paths. The body names no file paths; the UI code it describes lives under
ui/here (the Console isui/apps/console, the librariesui/packages/*).References. The bare issue numbers in the body were written in objectui and now resolve against this repository by mistake; read them as objectstack-ai/objectui#3297, objectstack-ai/objectui#11819.
No stale
pm:dispatchedor assignee to strip.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 1 · 2026-10-26T08:33Z
Session:
session_01SMps7wq7rBTk53e8KTSEup(the seat; the card thread that implements it works on the branch below)Account:
os-steveBranch:
claude/project-thread-tvk6g5(platform-assigned card-thread branch; a card thread can push only its assigned branch and the name carries no card number, so this claim is the identity record)Worktree:
objectstack-project-thread-tvk6g5Domain:
domain:uiSeat:
domain:ui#2File surface:
ui/packages/plugin-map/src/ObjectMap.tsx(the style-failure alert, the invalid-coordinate notice, themapStyleErrorstate and the WebGL2 marker-list fallback it reuses) and plugin-map tests;ui/packages/i18n/src/locales/*.ts(append newelement.map.*keys only);scripts/sdui-manifest.record.json(re-record); root.changeset/25889-map-style-failure-notice.md(stop on breach; explain in the report). ⛔ui/.github/**and the root.github/workflows/ci.ymlare out of bounds (maintainer's word).Container & model:
M,mode:thread,model: default tier (dispatch-gates --tier --repo objectstack-ai/objectstack: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
the map renderer's own hard-coded English notices and its alert-over-map failure mode|the per-view mapStyle exists; no deployment-wide default|every deployment without public internet, through the public UIThread-read: 6407136555
Premise: corrected 2026-10-26T08:25Z — item 1 (translated notice, degrade to the marker list) holds on
origin/main05f7758f05; item 2 (a deployment-wide style setting) needs a new settings/runtime-config key and a Console CSP change, so it is split to #26001 and this claim is item 1 only: the PR body line 1 isPart of #25889Serial constraints cleared:
ui/packages/i18n/src/locales/*.ts— seat 1's #25916 and #25898 append keys there in parallel; append-only here too, the later lander mergesmain. No claim holdsObjectMap.tsx.Writes: PR only via the relay op
pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 25889, "status": "done", "branch": "claude/project-thread-tvk6g5", "pr": "https://github.com/objectstack-ai/objectstack/pull/26048", "session": "session_01HUu4jGnAzZqaB5qTG2fsX4", "premise_still_valid": true, "summary": "Item 1 only (Part of #25889; item 2 is #26001). Measured on 05f7758f: a MapLibre error event kept MapGL mounted with an English alert claiming the markers were listed in the search box and asking for a production style setting that does not exist. Now the error unmounts MapGL and renders the existing WebGL2 record list (testid map-style-fallback, searchable, rows take the marker click path) with a retry button; the alert keeps MapLibre's reason and names a real remedy (check this view's style URL, or ask an administrator to set a map style for this view). The style alerts, WebGL2 alert, list label and empty text, retry button and the excluded-coordinates count go through useObjectTranslation with inline en defaults; eight element.map keys appended to all ten packs, the count written Label: N so no plural family.", "tests": "At head 79dcecfd (main merged at 39a78b15, manifest re-recorded after): vitest packages/plugin-map/ + packages/i18n/ under the lock, Test Files 129 passed (129), Tests 1627 passed, 13 skipped; plugin-map alone at f4d90cad 42 files / 274 tests. New: ObjectMap.styleFailureList-25889.test.tsx (9 cases incl. map removed exactly once, retry remounts, unmount after the swap removes nothing twice and reaches no error boundary) and ObjectMap.noticesI18n-25889.test.tsx (real I18nProvider zh-CN). Flipped webgl2Controls-11819 style case; webgl2Fallback-11819 gains no-retry. Reverse run at f4d90cad with the base ObjectMap.tsx restored under a trap (restore proven by blob hash): 3 files red, 11 failed / 2 passed. type-check plugin-map and i18n: 0 errors, both new test files in the test program (--listFiles). NOT MEASURED: a real started MapLibre map removed after a style failure in a browser (happy-dom has no WebGL2; the stub cleanup stands in).", "gates": "Local at 79dcecfd: dispatch-gates --commands derived 46 families, each run with exit captured before any pipe, all exit 0; --ran reconciliation: 46 derived, 46 run, 0 NOT-MEASURED (derived zero). ui scripts check-i18n-call-site-keys, check-i18n-en-drift, check-i18n-dead-keys: exit 0. node scripts/check-sdui-manifest.mjs: exit 0 after re-record. eslint over touched files: 0 errors (pre-existing warnings only). PR check-runs: in_progress at report time, not awaited.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0 — no MCP GitHub calls", "api_writes": "2 — relay pr_create (POST pulls + POST issues/26048/assignees, one relay action) and this os-dev-report comment via post-stamped (POST issues/25889/comments); git push is not a REST write", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — the same map view still renders English literals: search placeholder, Loading map..., geolocation button label and its two error strings, popup Edit/Delete, mobile sheet labels, overlay title Location Details (listed in the PR Acceptance notes)", "carrier: seat 2 · file surface: ui/packages/i18n/src/__tests__/ariaLabelLiteralCensus-12145.test.ts was edited outside the claim's declared surface — a one-word deletion (Locations) the frozen backlog census requires in the commit that translates that aria-label" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Surface amendment · domain:ui seat 2 · 2026-10-26T10:16Z
Session:
session_01SMps7wq7rBTk53e8KTSEupSeat:
domain:ui#2Branch:
claude/project-thread-tvk6g5Amends: Claim 6411675493
File surface (added):
ui/packages/i18n/src/__tests__/ariaLabelLiteralCensus-12145.test.ts, a one-word deletion only (Locationsleaves the plugin-map row of the frozen literal-aria-label backlog). The census forces it in the same commit that translates that label, which this card does. Four checks pass: it is the same defect class (an untranslated literal), the change is mechanical, no other claim holds the file, and it belongs to the same i18n gate family.objectstack-fleet commentedon Oct 26, 2026
Pointer ·
domain:uiseat 2 · 2026-10-26T10:17ZItem 1: ACCEPT → PR #26048 comment 6413581466 (head
79dcecfd). The seat lands it once the checks are green. Item 2 is #26001.objectstack-fleet commentedon Oct 26, 2026
Landed · seat 2 · 2026-10-26T16:53Z
326a5593. It carries #26048 (Part of #25889, head79dcecfd) verbatim, with seat 2's ACCEPTorigin/main6862ef62, contains326a5593(git merge-base --is-ancestorexit 0)gh-readonly-queue/main/pr-26158-*: 0 leftStatus: item 1 (translated failure notice, degrade to the marker list) is done. Item 2 (a deployment-wide style setting) was split to #26001, which carries it from here. Closing as completed;
pm:dispatchedcomes off.