Skip to content

docs: reject the unread workspace flag in the contract, and demote row editing to the backlog (#288, #279, #284) - #311

Merged
cevheri merged 1 commit into
mainfrom
fix/288-279-284-triage
Aug 7, 2026
Merged

docs: reject the unread workspace flag in the contract, and demote row editing to the backlog (#288, #279, #284)#311
cevheri merged 1 commit into
mainfrom
fix/288-279-284-triage

Conversation

@cevheri

@cevheri cevheri commented Aug 7, 2026

Copy link
Copy Markdown
Member

Closes #288. Closes #279.

Three deferred items, triaged by what each one costs a reader rather than by how much work it is. No behaviour changes — a deprecation tag, a backlog entry and a module header.

The context: these three are not scheduled while the product's attention is elsewhere. Leaving them open unanswered for months is its own cost, but so is closing a defect that still bites. So they are not treated the same way.

#288 — the flag now says it does nothing

WorkspaceFeatures.inlineEditing is declared in a published interface, a host can set it, and nothing reads it: StudioWorkspace hard-codes editingEnabled={false} at both grid call sites, and the embedded query adapter's executeQuery takes no execution options, so it could not carry the skipSafety flag the standalone inline-edit path relies on (#269) even if a caller reached it.

The issue offered two resolutions — remove the field, or implement it. Both are wrong right now: removing it stops every host that sets it from compiling, and implementing it waits on #279. So this takes the option the issue was actually asking for. Its own words are that "a declared capability that is neither implemented nor rejected is the state to avoid" — this rejects it, explicitly, where a host reads the contract.

Verified in the built package rather than assumed: the tag lands on the field in dist/workspace.d.ts, so a host's editor strikes it through and says why.

#279 — moved to docs/BACKLOG.md and closed

Deferred work, not a defect. #269 already made the software honest about it: the supportsInlineRowEdit capability hides the control wherever the shared UPDATE <table> SET <col> = <val> WHERE <pk> = <val> shape does not fit, so nothing is broken and no user is misled — the feature is simply absent on ClickHouse, Druid, MongoDB, Redis, Couchbase and the embedded engine.

The backlog entry keeps everything the issue knew: the per-provider forms (ClickHouse's ALTER TABLE … UPDATE, MongoDB's document path, append-only engines keeping the capability false), the provider-triad obligation, and the two constraints inherited from #269 — one request per edited row, and primary-key detection that should come from the schema rather than from column names. It also records that whether row editing should be universal at all is a product decision.

That is a demotion, the reverse of the file's documented promote-to-an-issue rule, so the rule now states both directions and where the line falls:

An issue that is understood, breaks nothing today and is not scheduled belongs here rather than in a tracker where it only ages […] A defect a user can hit stays an issue — closing one of those hides a limitation instead of deferring it.

#284 — stays open, and the generator now states its gap

Not closed, and not backlogged. The schema-diff generator can emit migration SQL that is unrunnable outside PostgreSQL — a BEGIN;/COMMIT; wrapper that MSSQL cannot parse and Oracle reads as a PL/SQL block, ADD COLUMN/DROP COLUMN in one shape for eleven type ids, and DROP INDEX IF EXISTS fallbacks Oracle rejects. A user meets that as broken SQL, so it keeps its issue; closing it would hide a limitation rather than defer it.

What it lacked was any statement of the gap where a developer meets it. generateMigrationSQL(diff, dialect) takes a dialect whether or not the path in question uses one, so the partial coverage is invisible from a call site. The module header now names the one path that is dialect-aware (the modified-column path, #269) and the four that are not.

The issue itself is getting a help wanted label and a comment recording that it is unscheduled, well specified, and that the emitted forms want checking against a live MSSQL and Oracle before they are settled — the way #264 and #265 were.

Verification

bun run format · bun run lint (0 errors; no warning touches either changed source file) · bun run typecheck · bun run knip · bun run test (exit 0) · bun run build · bun run build:lib + bun run attw · bun run coverage:check29254/29254 lines (100.00%).

No tests were added: nothing executable changed. The one claim worth checking mechanically — that the deprecation reaches consumers — was checked against the built dist/workspace.d.ts.

…w editing to the backlog

Three deferred items, triaged by what each one costs a reader rather than by how
much work it is. None of them changes behaviour.

**#288 — `WorkspaceFeatures.inlineEditing` now says it does nothing.** It is
declared in a published interface, a host can set it, and nothing reads it: the
embedded workspace hard-codes `editingEnabled={false}` at both grid call sites and
its adapter cannot carry the `skipSafety` flag the standalone path relies on. The
issue offered removing the field or implementing it; both are wrong right now —
removing it breaks every host that sets it, implementing it waits on #279. The
third option is the one the issue was actually asking for: a declared capability
that is neither implemented nor rejected is the state to avoid, so this rejects it
explicitly, in the place a host reads the contract. Verified in the built package:
the tag is on the field in `dist/workspace.d.ts`.

**#279 — per-dialect row editing moves to `docs/BACKLOG.md`.** It is deferred work
rather than a defect, because #269 already made the software honest about it: the
`supportsInlineRowEdit` gate hides the control wherever the shared `UPDATE` shape
does not fit, so nothing is broken and nobody is misled. The entry keeps what the
issue knew — the per-provider forms, the two constraints inherited from #269 (one
request per row, heuristic key detection), and that whether row editing should be
universal is a product decision.

That is a demotion, the reverse of this file's documented promote-to-an-issue
rule, so the rule now states both directions and where the line is: an
understood, unscheduled item that breaks nothing belongs here, and a defect a
user can hit stays an issue, because closing one of those hides a limitation
instead of deferring it.

**#284 — stays open, and the generator now says what it does not cover.** The
schema-diff output can be unrunnable outside PostgreSQL, which a user meets as
broken SQL, so it keeps its issue. What it did not have was any statement of the
gap at the call site: `generateMigrationSQL(diff, dialect)` takes a dialect
whether or not the path in question uses one. The module header now names the one
path that is dialect-aware and the four that are not.
@sonarqubecloud

sonarqubecloud Bot commented Aug 7, 2026

Copy link
Copy Markdown

@cevheri
cevheri merged commit a329696 into main Aug 7, 2026
18 checks passed
@cevheri
cevheri deleted the fix/288-279-284-triage branch August 7, 2026 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant