Skip to content

Release R1 — v0.20.0#131

Merged
fupelaqu merged 12 commits into
mainfrom
release-r1
Jun 24, 2026
Merged

Release R1 — v0.20.0#131
fupelaqu merged 12 commits into
mainfrom
release-r1

Conversation

@fupelaqu

Copy link
Copy Markdown
Contributor

Release R1 — v0.20.0

Finalizes the R1 release line by merging release-r1 into main. Version is bumped to 0.20.0.

Highlights — Pricing Repackaging & Quota Cleanup (Phase 0, elasticsql slice)

The open-core reprice now rests on an enforced, truthful, measurable quota model:

  • P0.1 + P0.2 — Quota model + dead-flag removal (8fcfb77): removed maxConcurrentQueries; Community maxJoins 1→2 and maxMaterializedViews 3→1; deleted the AdvancedAggregations / UnlimitedResults feature flags (result-limit policy is now driven solely by maxQueryResults). SHOW LICENSE no longer lists concurrent queries.
  • P0.5 — maxQueryResults enforcement (eb1d367): the advertised result cap is now actually enforced on the no-LIMIT single-index path via the license-agnostic ScrollConfig.maxDocuments mechanism + an additive ResultTruncation signal. The cap is suppressed for JOIN legs (ResultCapContext) so cross-index joins are never silently truncated; CoreDqlExtension is the OSS Community baseline while the un-forkable enforcement decision lives in the closed EnforcedDqlExtension (softclient4es-extensions).
  • P0.6 — Cap-hit funnel instrumentation (7d0b5e5): semantic TelemetryCollector.incrementCapHit(kind) at the result-cap reject sites, riding the existing InstancePing telemetry to the license-server.

Supporting changes

  • genericPersistence → 0.9.0 (4442e02)
  • CoreDqlExtension field visibility tightened to private (9b167eb)
  • Version → 0.20.0 (dcd2059)

Sibling repos (separate PRs, for the full R1 cut)

The cross-repo Phase 0 slices land in their own repos: softclient4es-extensions (P0.3 propagation + P0.5 EnforcedDqlExtension + P0.6 MV cap-hit), softclient4es-license-server (P0.3 + P0.6 cap-hit ingestion + Grafana), softclient4es-arrow (P0.4 boundary tests + P0.5 join-leg suppression + P0.6 joins/clusters cap-hit).

Not in this release (follow-up)

  • Phase 1 — P1.1 reprice/Stripe, P1.2 pricing page, P1.3 marketing/docs reconciliation (config/portal/docs only; no engine code).

🤖 Generated with Claude Code

fupelaqu and others added 12 commits June 23, 2026 12:26
…flags

P0.1 — remove unenforced maxConcurrentQueries from Quota; rebalance
Community tier (maxJoins 1->2, maxMaterializedViews 3->1); drop the
max_concurrent_queries row from SHOW LICENSE.

P0.2 — remove UnlimitedResults and AdvancedAggregations from the Feature
enum (values/fromString/toSnakeCase); result-limit policy is now driven
solely by Quota.maxQueryResults per tier (new ResultLimitInvariantSpec).

Feature.values is now size 6: MaterializedViews, JdbcDriver, AdbcDriver,
FlightSql, Federation, Repl.

P0.1, P0.2

Closed Issue #125

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
P0.1+P0.2 — Quota model changes & remove dead feature flags (elasticsql)
…Config.maxDocuments (join-safe)

Close the advertised maxQueryResults quota gap for single-index SELECT … FROM idx
with NO LIMIT. elasticsql-core = license-agnostic MECHANISM + Community baseline.

- NEW ResultCapContext: thread-scoped applyResultCap suppress carrier (DynamicVariable,
  default = apply cap); consumed by softclient4es-arrow join legs. run(sql:String)/
  ExtensionSpi.execute have no flag slot and the cap decision is synchronous-pre-Future,
  so a thread-local read sees what the leg executor / inbound-header middleware set.
- Additive ResultTruncation + default-None truncation field on QueryRows/QueryStream/
  QueryStructured (source-compatible; positional matches updated with `, _` — a custom
  1-arg unapply is NOT Scala 2.12-safe).
- CoreDqlExtension Community baseline: explicit-LIMIT>quota → 402 (unchanged); no-LIMIT +
  finite quota + fields.nonEmpty (mirrors SearchExecutor scroll-branch — aggregations/
  SELECT * stay on bounded searchAsync) + not-suppressed → capped scroll via
  ScrollConfig.maxDocuments + ResultTruncation. resolveQuota seam for EnforcedDqlExtension.
- NEW CoreDqlExtensionSpec (9 tests). + core/compile (2.12+2.13), 27 unit tests, headerCheck.

Closed Issue #127

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P0.5 — elasticsql: enforce maxQueryResults no-LIMIT cap (join-safe)
…csql leg)

Add the SEMANTIC cap-hit primitive to the shared TelemetryCollector and wire
the maxQueryResults reject site (CoreDqlExtension). Cap-hits are the launch
leading indicator (PRD section 15.1, pre-mortem Killer #2) - the only missing
funnel signal class. They ride the existing InstancePing daily-ping delta.

- TelemetryCollector: CapHitKind {MaterializedViews, QueryResults, Joins,
  Clusters} + 4 lock-free AtomicLong DELTA buckets + incrementCapHit(kind) +
  collectAndResetCapHits() (getAndSet, all-4-keys) + TelemetryData.capHitsByKind
  (collect reads, collectAndReset getAndSet) + Noop overrides. Mirrors the
  Story-15.3 JOIN-bucket pattern.
- CoreDqlExtension: capture capHitCollector = strategy.telemetryCollector at
  initialize; incrementCapHit(QueryResults) on BOTH capOrReject branches - the
  explicit-LIMIT 402 reject AND the P0.5 no-LIMIT truncation bite (OQ-2).
  Suppressed JOIN legs do not count (no double-count). Reject behavior unchanged
  (AC8 - increment is a side-effect before the existing return).
- Tests: TelemetryCollectorSpec (+10), CoreDqlExtensionSpec (+5). Cross 2.12+2.13
  green incl. testkit; headerCheck clean.

OQ-1 = semantic incrementCapHit per reject site (NOT 'count 402s' - joins/clusters
never raise a 402). Cross-repo P0.6 epic leg 1 of 4 (Phase 0 final story).

Closed Issue #129

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
P0.6 — elasticsql: cap-hit funnel instrumentation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@fupelaqu fupelaqu marked this pull request as ready for review June 24, 2026 08:29
@fupelaqu fupelaqu merged commit 1762d8a into main Jun 24, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant