Skip to content

schema sync: loose ends of publishing column changes (#32848) — ADR-0113 D5 wording, MySQL lock wait and COMMENT, cli.mdx table, Turso remote pin #32883

Open

Description

@objectstack-fleet

domain:server#4 · os-sales · session_01L6bhgWRcTEB3toGxnWvuvX

Review follow-up of #32590 (PR #32848, seat review PASS on 038057cd). Nits from that review, filed instead of a rework round.

Filing gate: ② review nits (review-checklist: small findings go to a follow-up card under the source card). class: b · type: Hardening · Suggested-grade: p2 · lane: domain:server (triage to confirm).

Blocked-by: #32848

Do

  • N1 — ADR-0113 D5 wording. D5 calls a stricter column on a required: true field silent. Since fix(driver-sql, objectql, metadata-protocol): publishing a field change on a live object brings its table to the declaration #32848, an explicit storage.notNull: false on such a field is reported, and publish applies it. Add one line to D5 saying so (governed path, own PR).
  • N2 — MySQL lock wait. On MySQL, MODIFY waits without a limit on its table metadata lock. The Postgres arm now bounds its wait to 5 s. Bound the MySQL wait too, minding that the timeout is per connection on pooled connections.
  • N3 — MySQL COMMENT. MODIFY drops any column COMMENT. Carry it over, or record why not.
  • N4 — content/docs/deployment/cli.mdx classification table. Add widen_date_to_datetime to the safe row, say that publish applies safe column changes, and fix where "relax NOT NULL" is classed (the table says safe, ADR-0113 D5 says needs_confirm; older than fix(driver-sql, objectql, metadata-protocol): publishing a field change on a live object brings its table to the declaration #32848).
  • N5 — Turso remote pin. Add an end-to-end test that the Turso remote path's skipped rebuild reaches the object-column-changes-not-applied advisory.
  • N6 — Postgres re-read under the lock (optional). Every replica takes the exclusive lock just to re-read the column (now time-limited). Optionally check the type before locking.

Not here: the Postgres datetime → date time-zone read is #32851.

Reader who acts: packages/drivers/driver-sql/src/sql-driver-schema-sync.ts, packages/drivers/driver-turso/** tests, content/docs/deployment/cli.mdx, docs/adr/0113-required-write-contract-vs-column-constraint.md.
Dedupe: repo:objectstack-ai/objectstack is:issue is:open widen_date_to_datetime → 1 hit, #32590 itself (the source card).


Generated by Claude Code

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 12, 2026
  2. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first-touch audit (pre-labeled card) · p2 → p3 · 2026-11-13T08:14Z

    ⛔ Not a claim; the claim (if any) is unchanged.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cw787kMeaX7oyz7DDC

    Claim: area-lease pilot #33059, area thread A4 (data layer) · p3 (no claimable p1/p2 left in A4) · dispatched to an os-dev subagent of this area thread · N4 + N5 in one PR (Part of #32883); N1 (ADR-0113, governed) in its own PR for the seat; N2/N3 (MySQL-only) and N6 (optional) reported, not done here
    Session: session_016WV4cw787kMeaX7oyz7DDC (area thread; subagent of it)
    Account: os-elon-musk
    Branch: claude/area-A4-32883
    Worktree: objectstack-a4-32883
    Domain: domain:server
    Seat: domain:server#5
    File surface: content/docs/deployment/cli.mdx, packages/drivers/driver-turso/** tests, docs/adr/0113-required-write-contract-vs-column-constraint.md (N1, separate branch claude/area-A4-32883-adr). Stop on breach.
    Container & model: M, mode:subagent, model: default, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the cli.mdx classification table matches what publish applies; a Turso remote skipped rebuild is pinned to reach the object-column-changes-not-applied advisory; ADR-0113 D5 states the reported storage.notNull: false
    Thread-read: none
    Premise: re-read at origin/main before any edit
    Serial constraints cleared: no open PR of this area touches these files

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 14, 2026
  5. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#5 · os-elon-musk · session_016WV4cw787kMeaX7oyz7DDC
    os-dev-report

    {
      "issue": 32883,
      "status": "done",
      "branch": "claude/area-A4-32883 (N4 + N5) and claude/area-A4-32883-adr (N1)",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/33387 (N4 + N5, Part of #32883); https://github.com/objectstack-ai/objectstack/pull/33382 (N1, governed docs/adr, draft for the seat)",
      "session": "session_016WV4cw787kMeaX7oyz7DDC",
      "premise_still_valid": true,
      "summary": "N4: cli.mdx drift table moves relax NOT NULL from safe to needs_confirm (schema-drift.ts classes both relax_not_null arms needs_confirm; dev auto-reconcile applies safe only), adds widen_date_to_datetime to the safe row, and adds a paragraph on what the publish of an object applies (every safe column change plus a relax_not_null whose field declares storage.notNull false; index changes stay with os migrate apply; an unapplied change answers the object-column-changes-not-applied warning). The same misclassification was corrected in the page's plan example (relax_not_null rendered under Needs confirmation) and the dev self-heal callout. N5: a Turso REMOTE describe in packages/runtime/src/domains/meta-object-publish-column-changes.test.ts publishes storage.notNull true to false over a libsql:// driver backed by an @libsql/client file client; it asserts publish success, one warning advisory object-column-changes-not-applied naming 'title' (relax_not_null), and notnull=1 still in the file. Placed in the runtime harness, not driver-turso, because the advisory is produced by metadata-protocol, which driver-turso does not depend on (deviation from the card's reader path, stated in the PR). N1: one sentence in ADR-0113 D5, separate draft PR. N2, N3 and N6 not done, per the dispatch.",
      "tests": "At 11c91b454: pnpm --filter @objectstack/runtime exec vitest run --maxWorkers=2 src/domains/meta-object-publish-column-changes.test.ts gives Test Files 1 passed (1), Tests 4 passed (4), lock VERDICT command-exit 0; the log shows 'relax_not_null on leave_request.title is unsupported on the Turso REMOTE transport, skipped'. pnpm --filter @objectstack/runtime typecheck exit 0 (tsc and check:test-typecheck OK). Ablation, change committed first, driver-turso resolves to src in the runtime vitest config: scripts/ablation-replace.mjs removed skipped.push(d) on the needs-table-rebuild arm of TursoDriver.applyMigrationEntries (anchor x1 to x0, blob 22c770ffb78c to 168795236a53); Turso test red with expected [] to deeply equal [ 'warning' ], 1 failed / 3 passed; restored blob 22c770ffb78c = HEAD, git diff HEAD empty. Declared narrowing: full runtime suite not run locally (one test file changed, no source), Test Core carries it in CI.",
      "gates": "Main PR at 11c91b454: dispatch-gates --commands derived 81 families; 79 exit 0 on the first pass; spec check:skill-examples and check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET, no dist) first, then exit 0 after the full build check:type-check-debt runs; dispatch-gates --ran: 81 accounted, 81 run, 0 NOT-MEASURED. ADR PR at 2f46edaa5: 21 derived; 20 exit 0; lint check:doc-formula-expressions exit 3 (formula not built in that worktree), NOT MEASURED locally, CI carries it; --ran: 21 accounted. CI at report time: 33387 checks in_progress; 33382 Governed Surface Queue Guard success, Dogfood Regression Gate success, PR-body guards success, Check Changeset failure (no changeset, needs skip-changeset), Type Check, Lint and Test Core still in_progress.",
      "dogfood_battery": "n/a: no ! in either PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "3: relay pr_create for 33382 (with its assignees leg), relay pr_create for 33387 (with its assignees leg), post-stamped os-dev-report comment on issues/32883/comments. Plus 4 git pushes (not REST).",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: #32883 · N6 (optional Postgres re-read under the lock) skipped as the dispatch said; N2/N3 MySQL-only, left on the card",
        "carrier: #32883 · cli.mdx os migrate table and example still say apply 'Applies loosening changes' / 'Apply safe (loosening) changes', while applyMigrationEntries also applies needs_confirm entries (only destructive needs --allow-destructive); docs wording only, noted, not filed",
        "carrier: seat · both PRs publish nothing (content/docs, a runtime test outside files[], docs/adr): each needs the skip-changeset label; 33382 Check Changeset is already red for that reason; not attached by the dev"
      ]
    }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:serverDomain lane — seat card indexed by label:pm:seatlease:A4pm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions