Repository navigation
chore: release Triplex packages - #35
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
September 29, 2026 18:23
b172e6e to
94523b2
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
October 8, 2026 05:42
fcf589e to
61efdc0
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 13, 2026 23:06
61efdc0 to
54fe416
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 23, 2026 16:51
54fe416 to
7a9793e
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
6 times, most recently
from
November 6, 2026 17:57
44630a7 to
9c69392
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
November 12, 2026 15:56
4ac2967 to
85c3964
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
November 12, 2026 20:06
85c3964 to
27822ce
Compare
Contributor
Author
|
Documentation preview removed (PR closed). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@triplex-build/triplex@0.3.0
Minor Changes
b26bfb2: Accept
validToinAttribute.AssertionOptionsand carry it on the emittedAttribute.Assertion,so
handle.assertion(value, { validFrom, validTo })produces a bounded valid interval. PreviouslyvalidTowas not part of the options type, and a non-literal options object silently dropped it.A non-finite
validTo, or one not later thanvalidFrom, throws.dfa9298: Expose raw transaction preview through the database subpath, sharing the client's constraint
projection and sensitive-value preparation. Add CLI why fact/attribute/entity/candidate and
transaction preview commands, shared wire schemas, and manifest discovery for CLI and MCP.
Both capabilities return Diagnostic failures and redact sealed envelopes. No existing API breaks.
3b6c09e: Replace CLI and HTTP failure bodies with stable core Diagnostic envelopes.
CLI failures now emit { ok: false, command, error: Diagnostic } to stderr and exit
nonzero, including argument and input failures with cli.* codes. Original causes
are available only with --debug.
HTTP failures now emit { error: Diagnostic }, retain existing statuses, and send
Retry-After: 0 for retryable conflicts. HTTP-owned error class code literals
change to http.* codes. OpenAPI describes the diagnostic envelope. Consumers must
update old top-level code/message body parsing and HTTP error constructors.
b184b37: Make attribute-use modifiers immutable and chainable in any order while preserving literal
cardinality and requiredness. Chained and options declarations produce identical configuration
content IDs, including sensitive attribute definitions.
Breaking:
Attribute.Use.requiredandAttribute.Use.uniqueare now methods. Read the datafrom
isRequiredandisUniqueinstead.cardinality,UseOptions, and entity-handle datafields are unchanged. Modifiers on definitions still accept options; subsequent use modifiers
are zero-argument calls that preserve the other constraints.
021c3e4: Add atomic
AttributeValue,AttributeAbsent, andEntityAbsenttransactionpreconditions. They check at most two unretracted facts across all valid times,
without loading unrelated attributes or retracted history. Value guards require
exactly one fact and compare canonical typed values; the sensitive decorator uses
blind equality for plaintext guards on sealed attributes.
Breaking pre-1.0 extension: custom
StorageAdapterServiceimplementations needlivePreconditionFacts, and exhaustive precondition switches need three variants.PostgreSQL SQL migration v6 builds a live expression index and analyzes triples to
avoid historical skew in its query plans; SQLite records v6 without extra DDL and
Cloudflare needs no migration beyond v6. KV adds one live ID key per fact. Existing
KV stores must upgrade all writers and run bounded
KvTriples.migrateLiveFactsbatches until complete before using these new guards. Existing APIs keep working
during that backfill, and historical indexes remain unchanged.
3b6c09e: Add commit validators: host checks that run inside
Triples.transactafter operations and thejournal envelope are applied and before commit. Validators read
beforeandafterviews atexact commit positions (entity, match, and complete Datalog) and may return typed rejections that
fail the whole transaction with
CommitRejectedError.TransactionMeta.validateinstalls themper call;
CommitValidation.layerdecorates anyLayer<Triples>so every application write pathruns them, and can durably record rejections as reserved facts after rollback.
CommitValidation.recordRejectionandreadRejectionsupport hosts that roll back an enclosingSQL transaction. Breaking:
Triples.transactnow includesCommitRejectedErrorin its error channel.Exhaustive error handlers must handle it. Commit views also provide read-only, position-bound
inbox/outbox point and pending reads; rejection rolls back entry appends and acknowledgements. The
SQLite and PostgreSQL adapters pass the rejection through their transaction boundary, and the
testkit conformance suite covers validator semantics on every backend. The HTTP
package maps rejections to
409 commit_rejected.9f4e703: Make the Triples-backed
ConfigStoreread only what each operation needs.resolveRefandsnapshotByIdread the ref and the objects reachable from the snapshot, cache immutable recordsby identity, and keep decoded trees until
:triplex/valid-underchanges;commit,setRefandreverseDependenciesno longer load the whole store.ConfigStore.commitno longer returns astore: callload()for the whole store.dfa9298: Add Datalog interval patterns (
{ pattern, valid: { from?, to? } }) and query-widevalidTime: "all"on KV, SQLite, and PostgreSQL. Project assertion bounds directly in nativequeries, with
nullfor open ends, finite-only ordered comparisons, null-safe equality,nullable aggregation, stable pagination, sensitive-value analysis, and shared conformance.
All-time mode rejects explicit
validAtand optional projections. Exact derivation provenanceand hypothetical overlays reject the new temporal forms.
Breaking: Datalog rows with attributes beginning
:_tx/now follow only the recorded cut,including variable-attribute scans, negation, disjunction, and rules. Backdated assertions can
join their asserting transaction's actor at a past valid point in one query. Existing metadata
queries may gain rows, negation may remove rows, and counts can change. Direct fact reads keep
their point semantics. There is no legacy mode.
Breaking: query pagination cursors use version 2; restart existing cursors. The executor SPI
accepts a query basis with no valid point for all-time reads.
SQL migration 8 adds non-partial attribute/end and attribute/start history indexes. PostgreSQL
keeps its BIGINT interval columns, avoiding a table rewrite and a precondition-plan regression.
Breaking: assertion bounds and numeric interval-pattern bounds now require integer epoch
milliseconds on every backend; fractional bounds fail with
time.invalid-bound. KV writers maintain history-preserving interval indexes; queries complete theirresumable backfill before using them. Upgrade all writers before enabling the new query engine.
Cloudflare and FoundationDB remain frozen experimental backends with no new certification.
c146b81: Add the browser-safe
/runnersubpath for durable derivation diff handlers, acknowledged candidatesnapshots, Outbox recovery, bounded retries, scoped supervision and offline temporal boundary replay.
Publish the ordinary runner control schema, runner conformance helpers and a compliance host using
schema-bound commands. Add
KvTriples.layerWithClockfor deterministic commit/runner clock wiring.Consumer checkpoints now read unretracted facts and write
validFrom: 0, preserving durableprogress when the wall clock rolls backwards.
023aecd: Require the tested Effect 4.1.1 peer and align the platform, SQL, and Vitest
companions. Upgrade the dashboard and embedded documentation explorer to Foldkit
0.170.0 and its Vite plugin to 0.29.0, removing the previous adapter overrides and
peer exceptions now that Foldkit accepts Effect 4.1.
Require Node.js 22.19.0 or newer for the CLI to match the Node platform adapters.
Refresh served OpenAPI snapshots for Effect 4.1 schema deduplication and encoded
query-parameter schema generation.
dd72143: Require the tested Effect 4.0.3 peer version and migrate SQL, HTTP, HTTP API, CLI,
and Base64Url encoding imports to Effect 4 stable. Upgrade the workspace dashboard
and embedded documentation explorer to Foldkit 0.168.0.
Use native branded-ID constructors, preserve closed runtime schemas with explicit
property-name checks, and normalize SQL numeric and timestamp values returned by
the new drivers. Refresh OpenAPI snapshots for stable Effect's schema generation.
021c3e4: Add
entityIdPrefixtotransactions({ after, limit })and tenant-protocolTransactions requests. Filtered pages return complete authoritative records for
commands touching a matching entity, deduplicate multiple matching entities, and
preserve global position ordering and exclusive resume cursors. Prefix matching is
literal and case-sensitive, including Unicode; an explicit empty prefix selects
transactions with at least one fact change.
Breaking pre-1.0 adapter extension: custom
StorageAdapterServiceimplementationsmust add indexed
transactionIdsForEntityPrefixdiscovery. SQL migration v7 addsPostgreSQL's binary-collation covering journal index and analyzes triples; SQLite
records v7 without extra DDL. Cloudflare uses its existing reference index and
needs no additional migration beyond v6. KV reuses its existing changed-entity
index, with no feed backfill; its candidate work scales with matching prefix
history, while unrelated transactions are not read. Upgrade the host package too
when using the new filter through the tenant protocol.
3b6c09e: Add entity-level write helpers to the ontology DSL.
EntityType.assert(id, values, options?)builds typed
assertoperations for a whole entity from alias-keyed values, with arrays forcardinality-many uses.
Attribute.assertionand the attribute handles now acceptvalidTo, andreject non-finite bounds or an empty
[validFrom, validTo)interval.GraphConstraint.pinned(release)returns the
configSnapshotandenforcetransaction metadata from one release.Attribute.usenow records a literal cardinality in its type, and
assertis a reserved entity attribute alias.Declare attribute uses concisely: attribute definitions now have
.required(),.many(), and.unique(), andEntityType.make(name, fields)accepts aliased fields directly, with a baredefinition as an optional single-valued use. Breaking: the wrapped
EntityType.make(name, { attributes: fields })declaration is removed; passfieldsdirectly.The compiled node content IDs are unchanged.
Type.where(entity, patterns)andType.not(entity, patterns)build Datalogpattern and negation clauses by alias, with typed constants.
whereandnotare now reservedattribute aliases as well.
Publish several entity types with
EntityType.nodesOf(...types), which deduplicates sharedattribute nodes by content ID. Sensitive attribute modifiers preserve their sensitive node,
and query builders use the same blind-token equality as handwritten patterns under
Sensitive.layer.GraphConstraint.pinnedmemoizes enforcement per release root content ID.Conditional
validFromandvalidTovalues may explicitly beundefined.Breaking type changes:
Attribute.Usenow carries literal cardinality (including changes toinferred assignment compatibility), and
assert,where, andnotare reserved entityattribute aliases. Attribute definitions now require the three modifier methods when
constructed structurally.
021c3e4: Expose
recordedPositionon the shared temporal read basis for entity, batch,match, Datalog, and paginated reads. Position zero is the empty cut; positions
must be non-negative safe integers. Supplying both
recordedAtandrecordedPositionis rejected. Valid-time behavior is unchanged.Position reads also hide later retraction metadata so the returned facts match
their earlier state; full audit/history reads retain the stored metadata.
Pages bind the explicit position into their cursor and preserve it across later
commits. Future positions are capped at the head for paging; omit the basis on
continuation to reuse that captured cut. Position-only pages do not add a
wall-clock filter.
EntityPageSnapshot.recordedAtis consequently optional forthese new requests, a pre-1.0 source-level change; existing timestamp/default
requests still return it. Persisted derivations retain the position basis and
include it in freshness and journal fallback checks.
SQL migration v4 adds
idx_entity_recorded_positionon entity ID and recordedposition. Run the existing
runMigrationsentrypoint before acquiring host-ownedunmigrated layers. Standalone migrating layers apply it automatically. Cloudflare
uses migration v5 (experimental); KV needs no migration. The testkit now checks
generated assertion/retraction/replacement histories against captured commit cuts
on every read surface.
dfa9298: Add the
whysubpath with theWhyservice for exact-cut explanations of facts,attributes, entities and derivation candidates, immutable release attribution and
bounded command causation. Sensitive values remain sealed.
Export shared assertion and explanation conformance cases for backend implementors.
021c3e4: Preserve
recordedPositionwhen forwarding tenant-protocolQueryandQueryPageoptions to Triples. Historical requests now retain their exact commit cut after
later assertions/retractions, including empty position zero and page continuation.
Requests supplying both recorded timestamp and position now reach core validation
and are rejected consistently. HTTP entity and collection reads now expose and validate
recordedPositionas anon-negative safe integer, retain it through cursor continuation, and reject it
on writes. Generated OpenAPI includes the parameter. Dashboard fact-read helpers
and entity pages preserve the same position, cap future page cuts at the initial
head, and continue accepting existing timestamp cursors. No new migration is
required.
b184b37: Add
Triples.liveFacts(entityId), an indexed read of unretracted assertions across all valid time, and use it for commandtx.getentity-state observations. Sensitive and commit-validation decorators preserve sealed values through this read. Existing KV stores require the existingKvTriples.migrateLiveFactsbackfill.Custom
TriplesServiceandStorageAdapterServiceimplementations must implement the newliveFactsmethod.dfa9298: Add the browser-safe
live-querysubpath with scopedLiveQuery.watch, complete exact-cut snapshots, resume tokens, deadline scheduling, optional coalescing and pull backpressure. Export a shared KV/SQLite/PostgreSQL observation corpus from testkit.Subscription invalidation now treats dynamic attributes as database-wide and uses proven per-attribute subject sets. Manually constructed
QueryDependencieswithout this optional proof conservatively invalidate all subjects of a matching attribute; namespace/type heuristics no longer narrow dynamic reads.3b6c09e: Read the selected database release in
describe, defaulting tolivewith a--refoverride.Retain the command manifest and add schema, constraints, config objects, write rules, and attributed,
release-pinned transaction examples with enforcement. Missing releases return a publishing hint.
Behavior change:
describenow opens the selected database and can apply its pending migrations,like other data commands; it requires a working database connection.
b184b37: Expose only the documented services from backend convenience layers. This is a breaking type and runtime change: SQLite's
layer,layerMemory, andlayerMemoryWithScope, and PostgreSQL'slayerandlayerFromUrl, now output onlyTriples. SQLite no longer exposes its SQL client, storage adapter, query executor, dialect, clock, or ID generator through these layers. PostgreSQL standalone layers no longer expose their SQL client or backend-specific client.PostgreSQL's
layerForDatabaseandlayerForDatabaseMigratedexpose exactlyTriples | SqlClient, retaining the schema-bound client for host transactions. The ambient-client constructors still requireSqlClientand output onlyTriples. Compose SQL or implementation layers explicitly when their services are needed.c146b81: Consolidate all published APIs into one package. Install
@triplex-build/triplex effectand the driver for your backend. Replace imports as follows:
@triplex-build/triplex-sql→@triplex-build/triplex/sql@triplex-build/triplex-sqlite→@triplex-build/triplex/sqlite@triplex-build/triplex-postgres→@triplex-build/triplex/postgres@triplex-build/triplex-cloudflare→@triplex-build/triplex/cloudflare@triplex-build/triplex-foundationdb→@triplex-build/triplex/foundationdb@triplex-build/triplex-host→@triplex-build/triplex/host@triplex-build/triplex-http→@triplex-build/triplex/http@triplex-build/triplex-testkit→@triplex-build/triplex/testkit@triplex-build/triplex-testkit/postgres→@triplex-build/triplex/testkit/postgres@triplex-build/triplex-mcp→@triplex-build/triplex/mcpThe
triplexbin replaces installation of@triplex-build/triplex-cli.Run the former
triplex-mcpexecutable astriplex mcp; run the prebuilt explorerwith
triplex dashboard. CLI library exports are internal; MCP'stoolsandregistrationsare available from/mcp. Drivers and Node platform adapters areoptional peers loaded only by their backend subpath or executable. Existing root
and core subpaths retain their paths. Cloudflare and FoundationDB ship as frozen,
experimental backends. Only the unified package is versioned and published.
dfa9298: Add
Triples.assertion(id)for retained assertions, including retraction metadata.Breaking: KV
Triples.get(id)now returns only unretracted assertions, matchingSQL. Use
assertion(id)for the former historical lookup behavior. CustomTriplesServiceimplementations must addassertion; custom storage adaptersmust honor the optional
includeRetractedargument togetById.021c3e4: Surface structured PostgreSQL serialization and deadlock failures as
TransactionConflictErrorrather than wrapping them inWriteError. Conflictsnow expose
isRetryable: true, an optionalserialization/deadlockreason,and the original cause. Existing precondition conflicts retain their identity.
Add
PgTriples.withTransactionfor typed conflicts spanning host SQL, nestedTriplex calls, and the outer commit. Other host SQL/domain errors remain unchanged.
There are no automatic retries; reload state and retry the entire host transaction.
The allocator and commit-order guarantees are unchanged; no migration is needed.
This pre-1.0 change widens convenience write methods and adapter transaction error
channels to include
TransactionConflictError; the sensitive decorator preservesit too.
OverlayErrorfollows the widened assertion contract. Callers with expliciterror annotations may need to add this type, and Postgres callers catching only
WriteErrorfor native conflicts should handleTransactionConflictErrorinstead.3b6c09e: Add opt-in SchemaBound.layer to check Datalog and constant-attribute match reads against a committed configuration release, resolving movable refs on each call. UnknownAttributeError names the unknown key, clause path, and a nearby known spelling; match preserves its ReadError contract with the typed error in cause. Export pure attributesOf and checkAttributes helpers from the datalog subpath. Existing callers without the layer keep their current behavior. No breaking changes.
dfa9298: Add the
@triplex-build/triplex/databasesubpath with a schema-bound Effect service,release compatibility checks, pinned and enforced commands, guarded entity reads,
idempotent receipt recovery, typed bounded reads and queries, and stable asOf views.
Attribute.refnow retains its runtime target declaration andEntityType.nodesOfincludes transitive reference targets, deduplicated by CID. Existing individual node
CIDs are unchanged. The resulting nodesOf array can contain additional referenced
declarations; callers publishing only a partial graph now publish its target closure.
No existing method is removed, and the root export is unchanged.
cb4a12c: Add opt-in sensitive attribute values.
Attribute.sensitivemarks an attribute in itscontent-addressed config node. The new
@triplex-build/triplex/sensitiveentrypoint providesSensitive.layer, aTriplesdecorator that seals sensitive values through a pluggableValueCodecbefore storage. It ships an AES-256-GCM reference codec over WebCrypto with a keyedblind index, a non-confidential identity codec for development, and test-only
KeyProviderkeyswith rotation and destruction. Reads, the journal and snapshots return sealed values, and
Sensitive.openis the only path to plaintext. Datalog, uniqueness and derivations supportpresence and blind-token equality; projections, ordering, predicates, aggregates, rules and joins
with plaintext fail during planning with
SensitiveQueryError.TripleValue,ValueTypeandTriple["value"]gain thesealedvariant, and Datalog typedconstants gain
{ type: "blind" }. Code that switches exhaustively overvalue.typemust handlesealed. SQL migration v3 addsvalue_sealed,value_blindandidx_attr_blind. PostgreSQLwidens its value-type check in place; SQLite rebuilds the
triplestable, which takes timeproportional to its size.
Migrationgains optional per-dialect statements, andrunMigrationsapplies each migration atomically. HTTP renders sensitive fields as a
$sealedmarker and refusessensitive writes without the decorator. The CLI prints sealed values without ciphertext or blind
tokens. The testkit exports sealed-value conformance cases and plaintext-scan helpers.
dfa9298: Add entity decoding options for distinct-value scalar cardinality, aggregate type membership validation, and detailed value diagnostics while keeping strict defaults. Reuse the core entity decoder for HTTP reads with unchanged response bodies and diagnostics.
3b6c09e: Export
diagnose(error)andDiagnosticfor stable, JSON-serializable error codes,input paths, recovery hints and retryability across public core errors. Datalog
validation errors now carry optional code, path and fix metadata at their raise
sites. Constraint details expose only keys, subjects and valid-time instants;
transaction conflicts distinguish precondition, serialization and deadlock causes.
No existing public shapes are removed. Error codes are a new public contract;
callers can branch on them instead of parsing free-text messages.
3b6c09e: Add pure
Change.end,replace,correct, andcombinebuilders with TripleLive guards,plus typed EntityType helpers that encode one aliased value. Temporal splits preserve the
original past and replacement end, and reject invalid split instants with ChangeRangeError.
Breaking change: EntityType aliases
end,replace, andcorrectare now reserved forthe new helpers. Rename attributes using those TypeScript aliases; their global keys can stay
the same.
Sensitive temporal changes reuse existing ciphertext only when a same-transaction explicit
retraction identifies a stored fact with the same entity, attribute, envelope and blind token.
All other sealed inputs remain rejected; plaintext replacements seal through the usual write path.
dfa9298: Add Database.preview(meta, build, options?) to inspect compiled operations and guards,
assertion/retraction descriptions, newly introduced graph violations, optional derivation
candidate diffs, and existing command receipts without committing. Sensitive values remain
sealed. Preview and command share their builder compiler. No breaking changes.
dfa9298: Add indexed
Triples.resolveRecordedBasisandTriples.dependencyStateAllreads.Resolve recorded timestamps to exact captured commit cuts, including tied instants,
and read wildcard freshness and valid-time schedules without loading fact payloads.
Breaking adapter contract: custom Triples services must implement both reads, and
StorageAdapter implementations must add
recordedPositionAtanddependencyStateAll.Apply SQL migration v9 before using these reads with host-owned schemas. Existing KV
stores build the new read indexes once on opening. Service decorators that spread the
inner service pass both methods through unchanged.
ace84f0: Check the current schema version when acquiring an unmigrated PostgreSQL adapter
or Triples layer. The exported
SchemaVersionErrorincludes expected and actualversions and directs hosts to
runMigrations. Missing histories report version 0;older and newer schemas are rejected without running DDL. Other SQL failures stay
SQL failures.
This is a pre-1.0 breaking change to acquisition behavior and its typed error
channel: hosts must run migrations before building an unmigrated layer, rather
than inside the application receiving it. No new migration is required; apply
the existing migrations. Auto-migrating conveniences retain their behavior.
Add
postgresSchemaLayerin@triplex-build/triplex-testkit/postgres. It creates,migrates, and cleans up a per-acquisition schema and supplies a schema-bound pool
and the caller's Triples layer. Install the compatible optional
@effect/sql-pgpeer when using this subpath; other testkit consumers do not need the driver.
021c3e4: Add indexed inbox/outbox entries that compose with facts in
transact, deduplicatecanonical payloads by scoped idempotency key, page pending work globally or per
entity, and retain acknowledged history. A different payload for an existing key
fails atomically with non-retryable
OperationalEntryConflictError.Breaking pre-1.0 extension:
TransactOphasappend-entryandacknowledge-entryvariants,
TriplesServicehas two new read methods, andStorageAdapterServicerequires four entry persistence methods. Update custom implementations, exhaustive
switches, and explicit transaction error unions. Host-owned SQL must apply migration
v5 before layer construction; Cloudflare applies v6. KV needs no data migration.
Payloads are canonical JSON supplied by the host and are outside attribute-based
sensitive-value policies; hosts seal sensitive contents before appending.
b184b37: Add Database receipt lookup, paged entity transaction history with alias-discriminated typed changes, and read-only inbox/outbox access with deterministic entry IDs. Receipt and history reads honor the recorded cut of asOf views; operational mailbox reads remain live-only. Sealed journal values remain sealed.
3b6c09e: Add Effect-native
EntityType.decodeto materialize visible facts by declaration alias,validate stored types and requiredness, reject ambiguous scalar facts and mixed subjects or
types, and keep sealed values as safe markers. Optional metadata preserves source facts for
temporal edits. Instants decode to epoch-millisecond numbers; many values deduplicate and
sort by canonical identity.
Attribute.Usenow carries a third generic parameter for literal requiredness. Concisemodifiers and
Attribute.useretain that flag, and bare definitions remain optional. Existingtwo-parameter annotations remain broad; no existing runtime shape is removed. Decoded sealable
values include a
SealedMarkerunion because stored sealed values stay sealed even after asensitivity declaration changes. Breaking change:
decodeis now a reserved entity attribute alias, so declarations thatpreviously used that alias must rename it. No existing helper is removed.
dfa9298: Return
QueryResponsefromCommitValidation.View.query, matching the completeTriples.queryAllread. This is a breaking change: validator callers must readbindings from
response.resultsinstead of using the returned value as an array.The read remains complete at its fixed commit cut and has no continuation cursor.
Update shared backend validator conformance to cover this response contract.
Patch Changes
llms.txtdocumentation index from the package README.configcommand description in CLI help, which read "Splunk configuration objects".ConstraintViolationError.messagewith their constraint key,subject, and valid-time instant, instead of only a count, and add
Constraint.describeViolations.Document that enforced graph constraints hold at every valid-time edge of an entity.
andgrouping and multi-clauseoralternatives in Datalog preflight errors. Queries suchas
["or", [[c1, c2], [c3]]]or["not", ["and", ...]]now fail with a message naming the clauseand the supported shape instead of a schema union dump.
Datalog range scans for live and snapshot-pinned actor due-work queries without application DDL.
Preserve numeric comparison semantics and add shared backend conformance coverage for due-work
ordering, limits, temporal visibility, and continuation after retraction. Existing SQL databases
must apply migration v2; creating the index scans existing numeric history and can block writes.
on every backend. Persist change indices in journal JSON facts and read older records by metadata
fact ID without a schema migration. Pattern retractions expand in ascending triple-ID order.
This changes previously unspecified, backend-dependent journal ordering; callers that relied on
storage scan order must use submitted operation order instead.
database schema is now created on a separate connection before its schema-bound pools open.
Before, a pooled connection that opened before the schema existed could create migration tables
in
pg_catalogand fail with "permission denied to create pg_catalog.triplex_schema_migrations".Closing the database manager now also closes every cached database's connection pools; before,
they stayed open until the process exited.
applications can share one runtime. Keep exact development versions for repository
tests. Consumers of the CLI, SQLite and PostgreSQL packages must provide their
platform and SQL adapter peers alongside Effect.