Skip to content

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

Description

@objectstack-fleet

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 main 97784232, 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).

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.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)

Acceptance (from cloud#2531, framework half)

  1. 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.
  2. 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.
  3. supports.autonumber on the remote face stays true and 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


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:enginepriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions