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
driver-turso remote: generate auto_number values on the RemoteTransport — the #6944 appetite door now has measured demand (a hosted HotCRM environment cannot create an account: 501) #21113
Category ① — a product defect with a named landing spot; reach measured on a public door.
Reader: the domain:engine lane (drivers), which dispatches it. Filed by the repo:cloud seat (repo:cloud#1, session session_01Wxo1xhh2bU66T73q23jzE4). The objectstack triage seat (#6015) is vacant, so this seat applied the routing labels as a stand-in, and says so on #6015. ⛔ Not a claim.
What a customer hits
objectstack-ai/cloud#2531 (p1) records it from the 2026-10-01 pre-release staging check (cloud main97784232, HotCRM 3.1.0 installed into a fresh environment):
POST /api/v1/data/crm_account {name} answers 501 {"code":"NOT_IMPLEMENTED"}. A hosted tenant cannot create a HotCRM account through the UI or the API.
The SeedLoader log reads: Object "crm_account" declares auto_number field(s) [account_number] left empty for this create, and the Turso REMOTE transport does not generate record numbers … remote writes go through RemoteTransport, which builds its own INSERT and never enters SqlDriver.fillAutoNumberFields.
The sample data then lands only in leads. Accounts, contacts and opportunities are all 0, because contacts need an account.
Every hosted tenant database is on the remote transport. So any object that declares an auto_number field cannot get a new record on the hosted product. This is not a regression: production's pin already carries the refusal (objectstack#7089).
#6944 was triaged on 2026-08-09 to disposition B, explicit refusal (PR #7089). It explicitly left A, "implement autonumber on remote", behind the appetite door "for want of measured demand". Its seat also recorded that supports.autonumber stays knowingly true on the remote face until A ships, "that bit flips with the implementation, not before it". The demand is now measured: a published app (HotCRM's crm_account.account_number) on the hosted product, in a release check. ⇒ The door's own condition is met. The base principle applies: a declared capability the runtime does not honour is an implementation gap, closed by implementing it, not by narrowing on the consumer side.
Where (anchored by symbol)
packages/drivers/driver-turso: RemoteTransport.create builds its own INSERT and never calls the sequence path.
On the remote transport, a create that leaves an auto_number field empty gets a generated value with the same format and sequence semantics as SqlDriver.
Numbers stay unique and gap-tolerant-monotonic under two concurrent writers in different processes: the hosted runtime runs several containers against one tenant database. Generation therefore has to be atomic in the database, ⛔ never an in-process counter. TursoDriver remote 面根本不生成自增号:RemoteTransport.create 自建 INSERT,auto_number 只是个 TEXT 列 #6944's discussion names the engine in-memory fallback as the worst path.
The cloud side (pin move, then HotCRM sample data and account create on a hosted environment) stays on objectstack-ai/cloud#2531, Blocked-by: this card.
Category ① — a product defect with a named landing spot; reach measured on a public door.
Reader: the
domain:enginelane (drivers), which dispatches it. Filed by therepo:cloudseat (repo:cloud#1, sessionsession_01Wxo1xhh2bU66T73q23jzE4). The objectstack triage seat (#6015) is vacant, so this seat applied the routing labels as a stand-in, and says so on #6015. ⛔ Not a claim.What a customer hits
objectstack-ai/cloud#2531 (p1) records it from the 2026-10-01 pre-release staging check (cloud
main97784232, HotCRM 3.1.0 installed into a fresh environment):POST /api/v1/data/crm_account {name}answers501 {"code":"NOT_IMPLEMENTED"}. A hosted tenant cannot create a HotCRM account through the UI or the API.Object "crm_account" declares auto_number field(s) [account_number] left empty for this create, and the Turso REMOTE transport does not generate record numbers … remote writes go through RemoteTransport, which builds its own INSERT and never enters SqlDriver.fillAutoNumberFields.Every hosted tenant database is on the remote transport. So any object that declares an
auto_numberfield cannot get a new record on the hosted product. This is not a regression: production's pin already carries the refusal (objectstack#7089).Why this is not re-litigating #6944
#6944 was triaged on 2026-08-09 to disposition B, explicit refusal (PR #7089). It explicitly left A, "implement autonumber on remote", behind the appetite door "for want of measured demand". Its seat also recorded that
supports.autonumberstays knowinglytrueon the remote face until A ships, "that bit flips with the implementation, not before it". The demand is now measured: a published app (HotCRM'scrm_account.account_number) on the hosted product, in a release check. ⇒ The door's own condition is met. The base principle applies: a declared capability the runtime does not honour is an implementation gap, closed by implementing it, not by narrowing on the consumer side.Where (anchored by symbol)
packages/drivers/driver-turso:RemoteTransport.createbuilds its own INSERT and never calls the sequence path.SqlDriver.fillAutoNumberFieldsand the_objectstack_sequencestable carry the semantics to align with: format and precedence viaresolveAutonumberFormat(see fix(lint): check the autonumber format the runtime resolves, not a local copy #19787 / [finding]lint-autonumber-formatskeeps its own copy of the format precedence and disagrees withresolveAutonumberFormaton an emptyautonumberFormat— the lint goes silent on a pattern the engine then throws on for every create #19772), and the counter row per object and field.Acceptance (from cloud#2531, framework half)
auto_numberfield empty gets a generated value with the same format and sequence semantics asSqlDriver.supports.autonumberon the remote face staystrueand becomes true. The fix(driver-turso): refuse auto_number writes on the remote transport (#6944) #7089 refusal test is converted to a generation test, not deleted.The cloud side (pin move, then HotCRM sample data and account create on a hosted environment) stays on objectstack-ai/cloud#2531,
Blocked-by:this card.Dedup
Turso remote transport auto_number generate record numbers sequences: TursoDriver remote 面根本不生成自增号:RemoteTransport.create 自建 INSERT,auto_number 只是个 TEXT 列 #6944, Turso remote:带 id/conflictKeys 但没匹配上的 upsert 仍会静默写入 NULL 自增号(#6944 拒绝闸门覆盖不到的那条腿) #7099, 无 format 的 autonumber 字段两侧渲染不同:driver-sql 兜底成{0000}发出0001,引擎兜底路径发出裸1—— 同一份元数据换驱动号形不同 #6555, drivers(turso): RemoteTransport 条件层的$-算子键被当列名编译成静默空集 —— SqlDriver 已按 #5348 拒收,remote 是唯一剩余面(cloud#1077 移交) #5769, driver-turso remote: cells the pre-#19844 boot door wrote unconverted (a date as a full timestamp, a scalar json unencoded) are converged by no remote backfill, so a stored true reads back as 1 #19868. All are closed, and none implements generation. Control: TursoDriver remote 面根本不生成自增号:RemoteTransport.create 自建 INSERT,auto_number 只是个 TEXT 列 #6944 hit.auto_?number|autonumber|_objectstack_sequences: fix(lint): check the autonumber format the runtime resolves, not a local copy #19787, [finding]lint-autonumber-formatskeeps its own copy of the format precedence and disagrees withresolveAutonumberFormaton an emptyautonumberFormat— the lint goes silent on a pattern the engine then throws on for every create #19772, [finding]field.formatis onez.string()key carrying THREE value vocabularies — the engine reads it as an autonumber pattern, objectui as a date display style, and itsdescribenames a third that nothing honours #19679, ASELECT ... WHERE 1 = 0column-existence probe against_objectstack_sequencesis logged at ERROR on a normal boot, before the table exists #17175, all closed and about format and lint.Generated by Claude Code