Uh oh!
There was an error while loading. Please reload this page.
fix: resolve all CI build and test errors - #1007
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub.
|
- Fix TS2345 errors in objectql/protocol.ts: cast 'name' to 'any' in
SchemaRegistry.registerItem calls (lines 208, 222, 257, 269)
- Fix loadMetaFromDb to use registerObject for object types instead of
registerItem (fixes getItem/registerItem type mismatch for 'object')
- Fix discovery endpoint in hono, sveltekit, nuxt, nextjs, fastify
adapters: route discovery to prefix root instead of /discovery subpath
- Fix client feed namespace to use 'data' route instead of 'feed' route
(feed is a sub-resource of data: /api/data/{object}/{recordId}/feed)
Agent-Logs-Url: https://github.com/objectstack-ai/spec/sessions/7eed517d-0606-4b0b-b9f5-3aa8e3ac5fe8
Co-authored-by: xuyushun441-sys <255036401+xuyushun441-sys@users.noreply.github.com>Agent-Logs-Url: https://github.com/objectstack-ai/spec/sessions/7eed517d-0606-4b0b-b9f5-3aa8e3ac5fe8 Co-authored-by: xuyushun441-sys <255036401+xuyushun441-sys@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Pull request overview
Fixes CI failures caused by TypeScript build errors, adapter/test mismatches around discovery routing, incorrect client feed routing, and ObjectQL metadata hydration issues (notably around SchemaRegistry object registration semantics).
Changes:
- Adjust
SchemaRegistry.registerItem()calls in ObjectQL protocol to satisfy TypeScript when item type is inferred asunknown. - Move adapter discovery responses to the API prefix root (e.g.
GET /api) and update.well-known/objectstackredirects accordingly. - Correct client feed routing to use the
dataroute (/api/v1/data/{object}/{recordId}/...) instead of a standalone/feedroute.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/objectql/src/protocol.ts | Fix TS errors via keyField cast; adjust DB metadata hydration to route object records through registerObject() |
| packages/client/src/index.ts | Switch feed operations to use the data base route to match server routing |
| packages/adapters/sveltekit/src/index.ts | Serve discovery info at prefix root instead of /discovery |
| packages/adapters/nuxt/src/index.ts | Serve discovery at prefix root; update .well-known redirect target |
| packages/adapters/nextjs/src/index.ts | Serve discovery at prefix root; update .well-known redirect target |
| packages/adapters/hono/src/index.ts | Serve discovery at prefix root; update .well-known redirect target |
| packages/adapters/fastify/src/index.ts | Serve discovery at prefix root; update .well-known redirect target |
| CHANGELOG.md | Document CI/build/test fixes under Unreleased/Fixed |
| ? JSON.parse(record.metadata) | ||
| : record.metadata; | ||
| // Hydrate back into registry | ||
| SchemaRegistry.registerItem(request.type, data, 'name'); | ||
| SchemaRegistry.registerItem(request.type, data, 'name' as any); | ||
| return data; |
There was a problem hiding this comment.
The DB fallback hydration always uses SchemaRegistry.registerItem(...). For type === 'object', SchemaRegistry.getItem('object', ...) delegates to getObject() (objectContributors), so registering via registerItem won’t make future object lookups/listing work. Consider branching on record.type/request.type === 'object' and hydrating object records via SchemaRegistry.registerObject(...) (and pass namespace/package id from the sys_metadata row so FQNs and package scoping are preserved).
| item = typeof record.metadata === 'string' | ||
| ? JSON.parse(record.metadata) | ||
| : record.metadata; | ||
| // Hydrate back into registry for next time | ||
| SchemaRegistry.registerItem(request.type, item, 'name'); | ||
| SchemaRegistry.registerItem(request.type, item, 'name' as any); |
There was a problem hiding this comment.
Same as getMetaItems DB fallback: when request.type is 'object', hydrating via SchemaRegistry.registerItem(...) won’t populate the object registry used by getItem('object', ...)/getObject(). Align this path with loadMetaFromDb() by registering object-type records via SchemaRegistry.registerObject(...) instead, ideally using the sys_metadata row’s namespace and package id so FQN resolution remains correct.
| if (record.type === 'object') { | ||
| SchemaRegistry.registerObject(data as any, record.packageId || 'sys_metadata'); | ||
| } else { | ||
| SchemaRegistry.registerItem(record.type, data, 'name' as any); |
There was a problem hiding this comment.
loadMetaFromDb() is reading record.packageId, but the persisted sys_metadata field is package_id (see SysMetadataObject). As written, this will almost always fall back to 'sys_metadata', losing package ownership. Also, SchemaRegistry.registerObject should likely receive the record’s namespace (or data.namespace) so objects are registered under the correct FQN rather than the short name. Consider using record.package_id ?? record.packageId and passing record.namespace (and for non-object types, pass the package id into registerItem(..., packageId) so listItems(type, packageId) works).
| if(record.type==='object'){ | |
| SchemaRegistry.registerObject(dataasany,record.packageId||'sys_metadata'); | |
| }else{ | |
| SchemaRegistry.registerItem(record.type,data,'name'asany); | |
| constpackageId=(recordasany).package_id??record.packageId??'sys_metadata'; | |
| constnamespace=(recordasany).namespace??(dataasany)?.namespace; | |
| if(record.type==='object'){ | |
| SchemaRegistry.registerObject(dataasany,packageId,namespace); | |
| }else{ | |
| SchemaRegistry.registerItem(record.type,data,'name'asany,packageId); |
CI was broken on main due to TypeScript build errors, adapter/test mismatches on discovery endpoints, and incorrect client feed routing.
ObjectQL build (TS2345)
SchemaRegistry.registerItem()calls inprotocol.tsfailed type checking whenTinferred asunknownfromgetItem()return. Applied'name' as anycast, consistent with existing pattern inengine.tsandmetadata-facade.ts.loadMetaFromDbobject registrationregisterItem('object', data)stores in the generic metadata map, butgetItem('object', name)delegates togetObject()which reads fromobjectContributors. Objects registered viaregisterItemwere invisible to lookups. Fixed by routing object-type records throughregisterObject():Adapter discovery endpoints (hono, sveltekit, nuxt, nextjs, fastify)
All five adapters served discovery at
${prefix}/discoverybut tests expect it at the prefix root (GET /api). Updated discovery route and.well-known/objectstackredirect to target prefix root.Client feed routing
ObjectStackClient.feedmethods calledgetRoute('feed')→/api/v1/feed/..., but feed is a sub-resource of data. Changed togetRoute('data')→/api/v1/data/{object}/{recordId}/feed, matching server-side routing.