Skip to content

docs(plugin-map): compile the README's snippets against the shipped surface - #8271

Merged
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-doc-snippets-batch35-plugin-map
Sep 7, 2026
Merged

docs(plugin-map): compile the README's snippets against the shipped surface#8271
baozhoutao merged 2 commits into
mainfrom
claude/issue-5174-doc-snippets-batch35-plugin-map

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Part of #5174 (batch 35: packages/plugin-map/README.md)

Burns down the page's UNGATED_DOCS row in scripts/check-doc-snippet-types.mjs so the gate COMPILES its snippets instead of ledgering them. Base sha 320c84121 (carries PR #8260, batch 34); origin/main moved to 35e63669d mid-task and was merged in with a merge commit (never rebased), so every reading below is re-measured on the merged head a5c153e8d.

Two files: packages/plugin-map/README.md (+23/-10) and scripts/check-doc-snippet-types.mjs (-2, exactly this page's ledger row). No edit to packages/plugin-map/src/** or packages/types/src/**; no fragment marker; no widened or loosened type; no @ts-expect-error.

Census reading 1 — ledger-literal, on the base

Measured with the gate's OWN analyzer (scanFences + compileSnippets exports, same built .d.ts closure, same controls) with this page moved into the compiled tier; not a hand-written regex.

Fence Language Reading 1 (base)
53 ts parsed, judged, 0 diagnostics
71 ts parsed, judged, 0 diagnostics
135 ts PARSE FAILURE — TS1005 ';' expected. (never reaches the semantic phase)
161 tsx judged, TS2304 Cannot find name 'dataSource'.

Totals: 4 ts/tsx fences, 1 parse failure, 3 semantically judged, 1 failed. By code: parse:TS1005 x1, TS2304 x1.

Harness controls on that run: sentinel 1 diagnostic (TS2305 — the harness CAN fail), positive 0, resolution landed on packages/types/dist/index.d.ts, 0 src leaks.

The row's TS2322x1 is confirmed STALE — a fourth consecutive measurement finds no TS2322 on this page (batches 32, 33 and 34 measured the same absence). The rest of the row was accurate in count but wrong in wording, in the same way batches 31-34 found: "blocks fenced ts that are bare object literals or elided bodies" is ONE block, not blocks, and there is no elided body anywhere on the page; the undefined name is a single ambient dataSource, not "blocks continue an earlier block".

Blind spot, stated

The page also carries a bash fence (line 20) and a text fence (line 31). Neither is in this gate's ts/tsx population, so neither is measured here and neither is relabelled by this PR — reported, not repaired. Nothing else on the page is fenced.

Negative control — length-preserving, decimal literals

Two mutations of the BASE page, each applied to a scratchpad copy so the tracked tree was never touched, each byte-length-identical to the text it replaced (so no offset shifts for an unrelated reason) and each a DECIMAL literal (batch 34's octal corollary: an all-zero pad parses as an octal literal and measures nothing).

Control Mutation on the base Result
NC-A fence 53, declared OUTER member: objectName: 'stores', becomes objectName: 12345678, (8 chars for 8) run byte-identical to reading 1 — still 1 parse failure, still 1 TS2304, no new diagnostic
NC-B fence 53, declared NESTED member: latitudeField: 'lat', becomes latitudeField: 12345, (5 chars for 5) run byte-identical to reading 1 — no new diagnostic

That is the measurement the repair rests on: fences 53 and 71 were not "passing", they were UNBOUND. A bare const schema = { ... } compiles because nothing is ever asked of it, and the gate's green over this page's two clean fences was carrying no information at all — outer members and nested map members alike.

Per-fence decision

Fence Decision Why
53 const schema: ObjectMapSchema = ..., with import type { ObjectMapSchema } from '@object-ui/types'; added to the block the canonical authorable type; exported from the types barrel (packages/types/src/index.ts:421) and present on the built dist/index.d.ts. One fence, one module (batches 25-34's idiom), so the import is repeated rather than inherited.
71 same annotation, same import the gate forces every block to be its own module, so a type name from fence 53 is not in scope here; without its own import this fence would trade a silent pass for a TS2304.
135 fence REMOVED — replaced by a Markdown table (route (b), reasoned below) it was three bare record literals on three lines: three accepted INPUT shapes for one field, decided at runtime per record, not one copyable value.
161 declare const dataSource: ObjectMapProps['dataSource']; stand-in, and ObjectMapProps imported alongside ObjectMap a typed stand-in, not a marker and not any: the declaration is derived from the component's own props type, so it goes stale loudly if that prop's type moves.

Fence 135: the teaching decision, on the four axes

The block documented the three shapes locationField reads. Three options were weighed; (c) a fragment marker was excluded by the brief and is not defensible anyway — a marker here would declare "cannot compile" about a block that a table makes unnecessary.

(a) Three typed bindings (each literal bound to a Record of string to unknown, or similar).

  • Real business need: fails. Nobody authors these values — they are the shape of DATA already in a record. The reader's question is "will my location column be parsed?", and a binding answers a question nobody asked.
  • Long-term soundness: fails. Any type loose enough to accept all three shapes accepts everything, so the annotation would be decoration; the alternative (a union that mirrors the parser) duplicates in the docs a contract that lives in one function, and the two drift.
  • Making it hard for an AI to write wrong metadata: fails, and this is the axis that decided it. A compiling snippet reads as "the type system checks this". Here the type system checks nothing: extractCoordinates() tests the value's shape at runtime, per record. A green binding would teach a guarantee that does not exist — exactly the lenient-consumer shape commandment #0.1 refuses, one level up in the docs.
  • Startup-stage focus: neutral to negative — three more snippets to keep true.

(b) A Markdown table citing the parser — CHOSEN.

  • Real business need: it is the reference read the section is for, and it can carry what the fence could not (that the object form needs numbers already, that the string form is parseFloat-ed after trimming, that the array form must be exactly two elements).
  • Long-term soundness: names ONE authority — extractCoordinates() in packages/plugin-map/src/ObjectMap.tsx — instead of a second, weaker copy of it. This is the shape batches 31-34 landed for type-shape fences.
  • Making it hard for an AI to write wrong metadata: it removes a snippet that LOOKED authorable and was not, and it says out loud that the decision is made at runtime.
  • Startup-stage focus: no new surface, one fewer compiled block to maintain.

Cost, stated: the table is prose, so no gate re-verifies it. That is the honest trade — the alternative was a compiled block that verified nothing while looking as though it did. The same paragraph now also cites the range test and the excluded-records notice, which live in that same file (ObjectMap.tsx:891 and :1044).

Per-key table — every key the examples write

Key-surface bound (objectui#7927) applies at the OUTER level and only there: ObjectMapSchema extends BaseSchema, which carries an index signature, so an annotation checks member TYPES and never keys. ObjectMapConfig (packages/types/src/objectql.ts:2249) is a plain interface with NO index signature — measured, not assumed, in leg 4 below — so the nested map keys ARE key-checked. This is the first batch on this worklist where a nested config is genuinely key-checked.

Key Written by Declaration Renderer read Verdict
type 53, 71, 161 ObjectMapSchema.type (objectql.ts:2283) memo keys at ObjectMap.tsx:226, :287, :330 declared — keep
objectName 53, 161 :2296 :846, :943, and getDataConfig / resolveRecordSourceObjectName declared — keep
staticData 71 :2303 getDataConfig, read SECOND declared — keep
map 53, 71, 161 :2317, typed ObjectMapConfig :371 (schema.map ?? null), :366 for map.style declared — keep
map.latitudeField 53, 71, 161 ObjectMapConfig :2250 extractCoordinates :431-433 declared — keep
map.longitudeField 53, 71, 161 :2252 :431-433 declared — keep
map.titleField 53, 71 :2256 :884 declared — keep
map.descriptionField 53 :2258 :887 declared — keep
dataSource (prop) 161 ObjectMapProps.dataSource (ObjectMap.tsx:64) passed through ObjectMapRenderer index.tsx:57 declared — keep
onMarkerClick (prop) 161 ObjectMapProps.onMarkerClick (ObjectMap.tsx:75) the component's own prop declared — keep, see below

Nothing on the page writes an undeclared key, so there is no phantom to drop and no undeclared-but-read proposal from the examples themselves.

The brief's assumption A2 is FALSIFIED — reported, nothing changed

The dispatch assumed ObjectMapProps declares only schema, dataSource?, className?, data?, which would have made onMarkerClick a phantom prop the README teaches. It is not. ObjectMapProps (packages/plugin-map/src/ObjectMap.tsx:62) declares TEN members, and the built packages/plugin-map/dist/index.d.ts ships all ten: schema, dataSource?, className?, data?, onMarkerClick?, onRowClick?, onEdit?, onDelete?, enableClustering?, clusterRadius?. The README's props table lists exactly those (minus schema's siblings it folds into prose) and teaches no phantom. The separate runtime route the brief asked about — ObjectMapRenderer spreading the rest of its props into ObjectMap at index.tsx:57 — exists, but it is spreading DECLARED props, so it is not the undeclared-but-read case.

"What this component does not read" — every claim verified against the renderer

Claim Verification Verdict
markers not read no schema.markers read anywhere in packages/plugin-map/src/; the markers identifiers in the file are the internal cluster arrays TRUE
layers not read the string does not occur in the package's sources at all TRUE
height not read, container is 300px through 600px no schema.height read; the wrapper is h-[300px] sm:h-[400px] md:h-[500px] lg:h-[600px] at ObjectMap.tsx:1058 TRUE, and the numbers are exact
useGeolocation not read, a user-initiated button instead no schema.useGeolocation read; the button is at :1082-1089 (aria-label="Show my location", data-testid="map-geolocate") TRUE
per-marker icon / color / popup not read no schema.icon / .color / .popup read TRUE
filter.map no longer read, and says so in the console warnOnLegacyFilterMapConfig() at :210-243 detects the legacy stash and warns; getMapConfig reads config only from schema.map TRUE

Also spot-checked and correct: the default field names when no map block is present (latitude / longitude / location / description, and deliberately NO title default — objectui#5953, :415-422), and the camera claims (FIT_PADDING_PX = 48, FIT_MAX_ZOOM = 12, EMPTY_VIEW_ZOOM = 2, UNFITTED_CENTER_ZOOM = 3 in packages/plugin-map/src/camera.ts). No teaching defect found in this section, so nothing here is repaired.

One inconsistency found while verifying the last row is NOT on this page and NOT in this PR: that console warning names name as a default title field, which objectui#5953 removed on purpose. Filed as objectui#8270 (finding label, unassigned); it is a one-string change in src/**, out of this batch's surface.

The map view alias — batch 33's host-only reading does NOT transfer

Read before writing anything: unlike tree, map IS an authorable view type here.

  • ObjectViewSchema.defaultViewType (packages/types/src/objectql.ts:1804) includes 'map'.
  • NamedListView.type (:1988) includes 'map'.
  • ViewTypeSchema (packages/types/src/zod/views.zod.ts:26) includes 'map'.
  • The plugin registers object-map under namespace plugin-map and map under namespace view (packages/plugin-map/src/index.tsx:62-79), both resolving to the same renderer.

The page's existing statement — that map is "the bare spec view-type name (ViewTypeSchema's 'map'), for a node authored with it directly" and that inside an ObjectView a map view compiles to an object-map node — is therefore correct as written and is left unchanged. objectui#5321's host-composition-only ruling covers tree and chart, not map.

Census reading 2 — after the repairs, on the merged head

Fence (new line) Language Reading 2
53 ts judged, 0 diagnostics — and now actually checked (see the legs)
72 ts judged, 0 diagnostics
172 tsx judged, 0 diagnostics

Totals: 3 ts/tsx fences, 0 parse failures, 0 bound failures, 3 of 3 judged, 0 failed. Same harness controls (sentinel 1 / TS2305, positive 0, 0 src leaks).

Ledger decision

The page reads ZERO after the repairs, so its UNGATED_DOCS entry is DELETED rather than rewritten, per the ledger contract. Nothing is parked on a filed defect, so no marker is left behind. The ledger now holds 2 rows (README.md and packages/fields/README.md); the gate reports 227 covered ... 2 ungated, up from 226 covered / 3 ungated.

Strictness region

The region from the Fence scanning banner to EOF, byte-identical as required:

  • base 320c84121: sha256 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b
  • final head a5c153e8d: sha256 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b

Identical. The only change to the gate script is the removal of this page's ledger row, which sits above that banner.

Positive control — four legs, on the committed tree

Each leg mutates the committed README, proves the mutation reached DISK before reading any result, runs the real gate, restores, and proves the restore by STATE. Every leg ran under a trap ... EXIT INT TERM whose restore is git checkout HEAD -- ABSOLUTE_PATH (never a bare git checkout -- PATH, which would take the mutation back out of the index). HEAD blob for packages/plugin-map/README.md on a5c153e8d: 00f02c24f025cfbb1711eb7b2ce7c558f9afef2b.

Leg Mutation Mutated blob Gate exit Diagnostic
1 declared OUTER member wrong-typed: objectName: 42 f48a08e96f061b65f5dbc6b3a2c91f387ed710c9 1 (RED) [semantic] packages/plugin-map/README.md:60:3 TS2322: Type 'number' is not assignable to type 'string'.
2 invented OUTER key: thisKeyIsInvented: 'x' c06a1e3af10904d48da9b92ff23defbc5924c98b 0 (GREEN) none — 624 of 624 judged, 0 failed
3 declared NESTED member wrong-typed: map.latitudeField: 42 0645625e27470790cd4cd79a42b0b58823a039f2 1 (RED) [semantic] packages/plugin-map/README.md:62:5 TS2322: Type 'number' is not assignable to type 'string'.
4 invented NESTED key: map.invenTedNestedKey: 'x' 9dbfd3e47a201a39252abbbe3625c4c06b412f0b 1 (RED) [semantic] packages/plugin-map/README.md:63:5 TS2353: Object literal may only specify known properties, and 'invenTedNestedKey' does not exist in type 'ObjectMapConfig'.

After every leg: git hash-object on the path equals 00f02c24f025cfbb1711eb7b2ce7c558f9afef2b and git diff HEAD -- PATH is 0 bytes. Restore proven by state, not by an exit code.

What legs 2 and 4 measure together — the objectui#7927 bound, stated precisely for the first time on this worklist:

  • OUTER keys are NOT checked. ObjectMapSchema extends BaseSchema, whose index signature swallows any invented top-level key. Leg 2 is that bound, measured.
  • NESTED map keys ARE checked, both ways: leg 3 catches a wrong VALUE (TS2322) and leg 4 catches an invented KEY (TS2353), because ObjectMapConfig declares no index signature. Assumption A5 in the brief is CONFIRMED by measurement.

So the annotation this PR adds buys real key-checking over the map block — the part of these schemas an author most often misspells (latitudeFieId is the misspelling objectui#5018 exists because of) — while the outer level stays type-checked-but-not-key-checked. That asymmetry is the honest description of what a green run over this page now means.

Gates, pinned to a5c153e8d

Exit codes captured by redirect-then-capture (never read through a pipe), and quoted from each gate's own verdict line.

Command Exit Verdict line
pnpm check:doc-snippets 0 Scanned 229 document(s): 227 covered (124 of them hold a ts/tsx block), 2 ungated / Semantic phase: 624 of 624 block(s) judged, 0 failed. / Every covered documentation snippet compiles against the built types.
pnpm exec vitest run scripts/__tests__/check-doc-snippet-types.test.ts scripts/__tests__/check-doc-fence-languages.test.ts 0 Test Files 2 passed (2) / Tests 123 passed (123)
pnpm exec vitest run scripts/__tests__/ 0 Test Files 115 passed (115) / Tests 3415 passed (3415)
pnpm exec vitest run packages/plugin-map/ 0 Test Files 20 passed (20) / Tests 112 passed (112)
pnpm check:doc-types 0 Every documented component type is registered.
pnpm check:readme-exports 0 530 of them self-imports judged (530 real, 0 wrong-path, 0 fabricated) — assumption A4 confirmed: the new @object-ui/types import is a CROSS-package import, which this gate does not judge, and the ObjectMap / ObjectMapProps self-imports are both real exports of packages/plugin-map/dist/index.d.ts
pnpm check:doc-fences 0 every TypeScript block in 227 document(s) is fenced ts/tsx/typescript
pnpm type-check:scripts 0 clean tsc -p tsconfig.scripts.json
pnpm lint:root 0 32 problems (0 errors, 32 warnings) — all pre-existing no-explicit-any warnings, none in either changed file
pnpm check:control-bytes 0 OK (scanned 6579 tracked text file(s); skipped 85 binary)
grep -naP control-byte self-scan of both changed paths 1 (no match) clean
pnpm check:entry-guard 0 70 scripts/ file(s) — no entry guard outside the baseline
node scripts/check-changeset-presence.mjs 0 No source or published contract of a released package changed in this range, so no changeset is owed. — so no changeset is added, and no label is used to buy one
node scripts/check-governed-queue-guard.mjs --test on both changed paths 0 NOT GOVERNED — 2 path(s) checked against 5 governed surface(s); none matched.

The gate's build closure was rebuilt before every reading: pnpm exec turbo run build $(node scripts/check-doc-snippet-types.mjs --build-filter) --concurrency=2, 35 of 35 tasks successful, re-run after the merge.

Batch 36 forecast, measured on a5c153e8d

Both remaining ledger rows, measured with the same analyzer:

  • packages/fields/README.md — 2 tsx fences, 0 parse failures, 3 semantic diagnostics across 2 blocks: TS2307 (Cannot find module './MyCustomColorPicker') at fence 25, and TS7031 x2 (implicit any on the destructured field / value) at fence 37. The row's wording is stale in the familiar way: what it calls "2 undefined-name diagnostic(s)" are implicit-any diagnostics, not undefined names; its "1 unresolved-module" half is accurate.
  • root README.md — 5 fences, 0 parse failures, 6 semantic diagnostics across 3 blocks: TS2552 + TS2304 x3 (the four undefined names myAPI, MySidebar, SchemaRenderer, schema) and TS2420 + TS2355 (the elided DataSource implementation). This row is ACCURATE, count and classification both — the only row on the ledger that is.

Plugin-map was the last of the package READMEs on this worklist.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr


Generated by Claude Code

…urface

Part of objectui#5174 (batch 35): burn down the
`packages/plugin-map/README.md` row in `UNGATED_DOCS` so
`check-doc-snippet-types` compiles the page instead of ledgering it.

- Fences 53/71: `const schema: ObjectMapSchema` with the type import from
  `@object-ui/types`. They parsed and "passed" before only because nothing
  bound them — measured with a length-preserving decimal-literal negative
  control on both an outer member and a nested `map` key.
- Fence 135 (the three shapes `locationField` reads): the three bare record
  literals were the page's one parse failure (TS1005). They document three
  runtime-accepted INPUT shapes rather than one authorable value, so they
  become a table citing `extractCoordinates()` — the parser that decides the
  shape per record.
- Fence 161: `declare const dataSource: ObjectMapProps['dataSource']` retires
  the live TS2304. `ObjectMapProps` is a real export of this package.

The row's `TS2322x1` claim was stale for a fourth consecutive measurement.
The page now reads zero, so the row is deleted rather than rewritten.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions github-actions Bot added documentation Improvements or additions to documentation plugin labels Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3191.4 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-D3oivOnm.js
Status PASS

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

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 498.00KB 113.91KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 189.11KB 52.55KB
fields (index.js) 243.04KB 61.36KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.16KB 3.68KB
plugin-calendar (index.js) 48.03KB 13.29KB
plugin-charts (index.js) 71.38KB 19.92KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 247.68KB 63.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.58KB 56.63KB
plugin-kanban (index.js) 52.83KB 14.63KB
plugin-list (index.js) 113.38KB 27.73KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.46KB 20.80KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

ACCEPT (batch 35, packages/plugin-map/README.md) — reviewed on the tree at head a5c153e8d against origin/main b6f821a8b, read 2026-09-07T07:17Z; domain:devx @ objectui seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr.

Verified from the diff and the tree, not the report:

  • Two files, +23/−12: the README and exactly this page's UNGATED_DOCS row (3 → 2 rows: README.md, packages/fields/README.md). Strictness region on the head hashes 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b, byte-identical to the base.
  • Fences 53/71: const schema: ObjectMapSchema with its type import, one import per fence. Fence 161: declare const dataSource: ObjectMapProps['dataSource']; ObjectMapProps is exported at packages/plugin-map/src/index.tsx:20 and declares onMarkerClick (ObjectMap.tsx:75), so the example teaches no phantom prop — the brief's four-member assumption was wrong, the interface has ten.
  • Fence 135 → table (route b): every row matches extractCoordinates() at ObjectMap.tsx:429–471 (pair first, numbers only; object lat|latitude / lng|lon|longitude, numbers only; string split-trim-parseFloat; array of exactly two parseFloat-ed); the range test is at :891.
  • ObjectMapConfig (objectql.ts:2248) carries no index signature, so the fourth positive-control leg (TS2353 on an invented nested key) is the measurement that states the objectui#7927 bound; recorded as a carry-forward for batches 36–37.
  • map is authorable (unions at objectql.ts:1804/:1988); the page's registration wording left unchanged — correct.
  • Branch carries one merge commit from origin/main (35e63669d), never rebased; CI on the merged head is the judge.
  • Neither path is governed. No changeset owed (no published src moved).
  • Dev-filed finding(plugin-map): the legacy filter.map warning names a default name title field that objectui#5953 removed #8270 (finding, unassigned) is not a duplicate: checked against the seat's REST list of open cards (five keyword hits, none about the legacy filter.map warning's default names; control term present).

Next: CI convergence → flip ready → post-flip guard → auto-merge SQUASH → queue confirmation → landing probe (packages/plugin-map/README.md absent from UNGATED_DOCS, packages/fields/README.md still present as the control).


Generated by Claude Code

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

Armed: PR #8271 flipped ready at 2026-09-07T07:30:13Z on head a5c153e8d after CI converged all green (29 checks incl. the informational Live E2E, read 07:30:01Z); post-flip Governed Surface Queue Guard completed/success at 07:30:28Z; auto-merge SQUASH enabled; added_to_merge_queue at 07:30:36Z (read 07:30:40Z). Landing stroke follows the merge: content probe on re-fetched origin/mainpackages/plugin-map/README.md absent from UNGATED_DOCS, packages/fields/README.md still present as the control, ledger at 2 rows — then LANDED here and on #5174, then batch 36. — domain:devx @ objectui seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr.


Generated by Claude Code

@claude

claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

LANDED: merged at 2026-09-07T07:46:37Z as f20e57d62 (squash, via the merge queue). Content probe on re-fetched origin/main at f20e57d62 (read 07:47Z): UNGATED_DOCS in scripts/check-doc-snippet-types.mjs holds 2 rows (README.md, packages/fields/README.md); the packages/plugin-map/README.md row is absent (expected 0, got 0) and the packages/fields/README.md row is present as the control (expected 1, got 1); strictness region hashes 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b, unchanged; the fence-161 stand-in declare const dataSource: ObjectMapProps['dataSource'] is on main. Merge commit is an ancestor of origin/main. Batch 35 closed out on #5174. — domain:devx @ objectui seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr.


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants