Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion .changeset/pre.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,42 @@
"@chkit/plugin-obsessiondb": "0.1.1",
"@chkit/plugin-pull": "0.1.1",
"@chkit/plugin-ingest": "0.1.2-beta.7",
"chkit-example-clickbench": "0.0.0"
"chkit-example-clickbench": "0.0.0",
"@chkit/registry": "0.0.0",
"@chkit/kafka-e2e": "0.0.0"
},
"changesets": [
"api-sync-docs-rename",
"backfill-mv-replay-empty-target",
"backfill-replay-all-mvs",
"backfill-sql-scanner",
"checkpointed-registry-ingestion",
"circleback-independent-raw-resources",
"cli-skills-proxy",
"column-default-expressions",
"column-expression-kinds",
"column-kind-validation",
"consolidate-quote-aware-sql-scanning",
"create-chkit-next-steps-dedup",
"dictionary-schema-primitive",
"drift-ch-canonical-expressions",
"drift-index-arguments",
"e2e-testkit-local-stack",
"generate-empty-migration",
"google-calendar-raw-events",
"google-meet-core-raw-resources",
"index-only-projections",
"ingest-journal-atomic-attempt-start",
"ingest-journal-repair-hint",
"ingest-journal-replica-resilience",
"ingest-run-journal",
"ingest-run-namespace",
"ingestion-runtime",
"init-connect-runbook-consistency",
"journal-read-your-writes",
"kafka-table-engine",
"key-clause-function-expressions",
"lemlist-core-raw-resources",
"migrate-async-poll-resilience",
"migrate-retry-abandon",
"migrate-view-propagation-wait",
Expand All @@ -46,10 +58,18 @@
"obsessiondb-remote-insert-settings",
"obsessiondb-shared-engine-flags",
"orpc-deserialization-security",
"page-aware-pagination",
"provider-template-registry",
"pull-clause-and-derived-primary-key",
"pull-exclude-obsessiondb-metadata",
"pull-route-through-executor",
"quote-escape-identifiers",
"registry-app-discovery",
"registry-fixture-tests",
"registry-github-source",
"shared-plugin-command-runner",
"slack-independent-raw-messages",
"slack-raw-registry",
"snapshot-rebuild",
"sql-fragment-comments",
"text-index-round-trips"
Expand Down
36 changes: 36 additions & 0 deletions packages/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,41 @@
# chkit

## 0.2.0-beta.10

### Patch Changes

- ba4f762: Allow registry resources to declare cursor checkpoints and timestamp windows alongside full scans. Upgrade the eight raw API integrations with provider-specific sync tokens, overlapping incremental ranges, and safe restart recovery, while preserving historical registry releases. Use one pipeline per installation with independent resource or configured collection streams, editable configuration, injectable clients, and meaningful resource readers. Attio creates independent object-type and list streams using existing full-sync pagination, with People and Companies enabled by default. GitHub separates eight raw resource types per repository, including independent issues, PRs, comments, reviews, and SHA/message commits with warehouse join keys; it no longer fetches PR files or assembles child arrays. Resources without reliable change filters use built-in full-sync completion; Calendar tokens and Lemlist activity intervals retain their necessary recovery state. Meet and Slack use recent rediscovery and coarse completed-page checkpoints, replaying unfinished children without retained-work queues. Circleback independently reads meetings, complete transcript snapshots, action items, people, and companies with replay-safe full pagination.

Update the ingestion authoring skill with the registry sync quality bar, provider capability selection, meaningful stream boundaries, normalized raw ingestion by default with transformations and joins in ClickHouse, existing pagination/checkpoint primitives, coarse replay where affordable, explicit freshness coverage, durable recovery rules, and required failure/restart verification.

Linear syncs issues, comments, projects, project updates, cycles, users, teams, issue relations, and issue history into nine independent raw destinations. Seven resources own update-time windows; relations and history use complete full reads, with history discovering all issues independently of parent progress. Preserve raw relationship IDs and complete issue label names as strings, and leave joins and metrics to ClickHouse. Populate new destinations independently and migrate retained legacy nested comments deliberately.

Treat repeated pagination continuations as permanent provider-protocol errors so reader retries cannot repeatedly replay a cyclic collection.

Add per-integration changelog metadata, shown in registry inspection and integration guides. Keep one draft release per integration in each PR, refresh it in place until merge, and validate release artifacts against the PR base to protect published versions and changelog history.

- 027a69c: Split Circleback into independently selectable meetings, meeting transcripts, action items, people, and companies with raw destinations and replay-safe full reads. Cover all verified action-item statuses and ownership, keep transcript availability separate from successful content, retrieve complete same-resource person/company details, and represent applied tags as string names. Keep joins and transformations in ClickHouse and consolidate these changes into the integration's existing draft release.
- 76a0579: `chkit drift` no longer reports false drift when a schema expression is spelled differently from how ClickHouse stores it. ClickHouse reformats expressions on the way in — spacing argument separators and operators, adding precedence parentheses, and rewriting `INTERVAL 5 YEAR` to `toIntervalYear(5)` — so a skip index, `PARTITION BY`, `ORDER BY`, or `TTL` written as `cityHash64(a,b)` was stored as `cityHash64(a, b)` and reported as permanent drift that no migration could fix (#195).

`drift` now normalizes expressions through ClickHouse's own formatter (`formatQuerySingleLine`) before comparing, in a single batched round-trip, so equivalent expressions match regardless of spelling. When the connected server can't format a fragment — an older server without the function, or an expression it can't parse — that fragment falls back to plain text comparison, so behavior is never worse than before. `@chkit/clickhouse` gains `canonicalizeSqlFragments` for this.

- 6b6ef4b: Document and verify Google Calendar's events-only raw contract: native nested event fields remain unchanged, and sparse cancellations replace recurring exceptions under stable identities. Preserve the existing recoverable page and sync-token protocol in the integration's single draft release.
- a2e8a98: Add independent Google Meet participant, participant-session, and recording metadata streams alongside conferences, transcripts, and transcript entries. Rediscover recent conferences with a 24-hour lookback and ordinary nested pagination. Checkpoint completed discovery pages and replay their unfinished children instead of retaining conferences or per-child positions. Keep scoped identities, date-bound backfills, and bounded token recovery in the existing draft release. Recording rows retain links without downloading media; artifacts that appear after a conference leaves the lookback require an explicit backfill.
- 77c00b8: Fix `migrate` on replicated services (such as ObsessionDB) occasionally recording a migration as completed while one of its statements still read `started`. Each journal write re-reads the migration's row first, and that read could land on a replica that had not seen the previous write yet. The journal now never builds on a row version older than its own last write.
- e265457: Expand Lemlist to seven independent raw streams: campaigns, contacts, companies, campaign leads, activities, inbox conversations, and inbox messages. Use complete campaign-lead exports and full contact payloads, keep inbox reads read-only, and retain acknowledged incremental activity intervals. Preserve native relationship keys for warehouse joins and refresh the single integration draft release.
- 9a8a573: Add a source-template registry with `chkit add` and `chkit registry list`, `inspect`, and `build`. Install editable provider schemas and ingestion readers into an existing TypeScript project, preview changes before writing, and preserve local modifications on repeated installs. Publish versioned Attio templates with API sync setup, coverage, and registry authoring documentation.
- 9a8a573: Show registry apps with resource coverage, sync strategies, documentation links, and install commands in the CLI. Expose optional documentation and logo metadata in JSON discovery while supporting existing registry items. Add an app catalog and detailed ClickHouse integration guides to the documentation.
- 9a8a573: Support installing registry fixture tests with `chkit add --with-tests` and expose authentication setup, destination tables, API references, views, and sync behavior through registry inspection.
- b8984af: Read the default integration catalog and committed template releases directly from GitHub.
- 36da53d: Document Slack's three raw resources and verify messages-first ingestion and metadata execution that leaves message progress unchanged. Default message bootstrap and overlap to 24 hours, with optional explicit historical bootstrap and isolated backfills. Complete each history page's replies before checkpointing its timestamp frontier; interruptions replay the unfinished page instead of retaining thread queues. Remove automatic historical reconciliation: edits and late replies on roots outside the chosen window are excluded. Replies remain individual native messages joined through thread references in ClickHouse.
- dee07eb: Add an installable Slack app to the application registry with its official logo, raw conversation, user, message, and thread-reply ingestion, portable fixture tests, and a ClickHouse integration guide.
- Updated dependencies [cb56b91]
- Updated dependencies [76a0579]
- Updated dependencies [3c546e8]
- @chkit/clickhouse@0.2.0-beta.10
- @chkit/core@0.2.0-beta.10
- @chkit/codegen@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "chkit",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "ClickHouse schema and migration CLI for TypeScript projects",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
16 changes: 16 additions & 0 deletions packages/clickhouse/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# @chkit/clickhouse

## 0.2.0-beta.10

### Patch Changes

- cb56b91: Fix `chkit pull` leaving a key tuple wrapped (`orderBy: ["(\`w)x\`, id)"]`instead of`["\`w)x\`", "id"]`) when a key column has a quoted name containing a parenthesis. The pull plugin had its own paren-stripper that ignored quotes; it now uses the shared `stripWrappingParens`from`@chkit/core`.

The quote-aware SQL scanners (`splitTopLevelComma`, `stripWrappingParens`, the projection index normalizer, `findTopLevelSQLPattern`, and the create-table column-list finder) now share a single quote skipper, `findQuoteEnd`, so backslash escapes and doubled quotes are handled identically everywhere (#197). Previously `stripWrappingParens` and the projection index normalizer mis-read a string ending in an escaped backslash (`'a\\'`).

- 76a0579: `chkit drift` no longer reports false drift when a schema expression is spelled differently from how ClickHouse stores it. ClickHouse reformats expressions on the way in — spacing argument separators and operators, adding precedence parentheses, and rewriting `INTERVAL 5 YEAR` to `toIntervalYear(5)` — so a skip index, `PARTITION BY`, `ORDER BY`, or `TTL` written as `cityHash64(a,b)` was stored as `cityHash64(a, b)` and reported as permanent drift that no migration could fix (#195).

`drift` now normalizes expressions through ClickHouse's own formatter (`formatQuerySingleLine`) before comparing, in a single batched round-trip, so equivalent expressions match regardless of spelling. When the connected server can't format a fragment — an older server without the function, or an expression it can't parse — that fragment falls back to plain text comparison, so behavior is never worse than before. `@chkit/clickhouse` gains `canonicalizeSqlFragments` for this.

- 3c546e8: `@chkit/clickhouse/e2e-testkit`: `getRequiredEnv` is now `getLiveEnv`. Without `CLICKHOUSE_URL` or `CLICKHOUSE_HOST` it targets the local test stack (`http://localhost:8123`, the repository's `test/infra` Docker Compose stack) instead of throwing.
- Updated dependencies [cb56b91]
- @chkit/core@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/clickhouse/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@chkit/clickhouse",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "ClickHouse client wrapper for chkit",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
7 changes: 7 additions & 0 deletions packages/codegen/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# @chkit/codegen

## 0.2.0-beta.10

### Patch Changes

- Updated dependencies [cb56b91]
- @chkit/core@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/codegen/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@chkit/codegen",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "Migration artifact generator for chkit",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
8 changes: 8 additions & 0 deletions packages/core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# @chkit/core

## 0.2.0-beta.10

### Patch Changes

- cb56b91: Fix `chkit pull` leaving a key tuple wrapped (`orderBy: ["(\`w)x\`, id)"]`instead of`["\`w)x\`", "id"]`) when a key column has a quoted name containing a parenthesis. The pull plugin had its own paren-stripper that ignored quotes; it now uses the shared `stripWrappingParens`from`@chkit/core`.

The quote-aware SQL scanners (`splitTopLevelComma`, `stripWrappingParens`, the projection index normalizer, `findTopLevelSQLPattern`, and the create-table column-list finder) now share a single quote skipper, `findQuoteEnd`, so backslash escapes and doubled quotes are handled identically everywhere (#197). Previously `stripWrappingParens` and the projection index normalizer mis-read a string ending in an escaped backslash (`'a\\'`).

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@chkit/core",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "Schema DSL, config, diff engine, and migration planner for chkit",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
6 changes: 6 additions & 0 deletions packages/create-chkit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# create-chkit

## 0.2.0-beta.10

### Patch Changes

- @chkit/plugin-obsessiondb@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/create-chkit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "create-chkit",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "Scaffold a new chkit project from an example",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
10 changes: 10 additions & 0 deletions packages/plugin-backfill/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# @chkit/plugin-backfill

## 0.2.0-beta.10

### Patch Changes

- Updated dependencies [cb56b91]
- Updated dependencies [76a0579]
- Updated dependencies [3c546e8]
- @chkit/clickhouse@0.2.0-beta.10
- @chkit/core@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-backfill/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@chkit/plugin-backfill",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "Time-windowed data backfill with checkpoints for chkit",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
7 changes: 7 additions & 0 deletions packages/plugin-codegen/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# @chkit/plugin-codegen

## 0.2.0-beta.10

### Patch Changes

- Updated dependencies [cb56b91]
- @chkit/core@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-codegen/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@chkit/plugin-codegen",
"version": "0.2.0-beta.9",
"version": "0.2.0-beta.10",
"description": "TypeScript type and Zod schema generation plugin for chkit",
"license": "MIT",
"author": "ObsessionDB",
Expand Down
28 changes: 28 additions & 0 deletions packages/plugin-ingest/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,33 @@
# @chkit/plugin-ingest

## 0.2.0-beta.10

### Patch Changes

- ba4f762: Allow registry resources to declare cursor checkpoints and timestamp windows alongside full scans. Upgrade the eight raw API integrations with provider-specific sync tokens, overlapping incremental ranges, and safe restart recovery, while preserving historical registry releases. Use one pipeline per installation with independent resource or configured collection streams, editable configuration, injectable clients, and meaningful resource readers. Attio creates independent object-type and list streams using existing full-sync pagination, with People and Companies enabled by default. GitHub separates eight raw resource types per repository, including independent issues, PRs, comments, reviews, and SHA/message commits with warehouse join keys; it no longer fetches PR files or assembles child arrays. Resources without reliable change filters use built-in full-sync completion; Calendar tokens and Lemlist activity intervals retain their necessary recovery state. Meet and Slack use recent rediscovery and coarse completed-page checkpoints, replaying unfinished children without retained-work queues. Circleback independently reads meetings, complete transcript snapshots, action items, people, and companies with replay-safe full pagination.

Update the ingestion authoring skill with the registry sync quality bar, provider capability selection, meaningful stream boundaries, normalized raw ingestion by default with transformations and joins in ClickHouse, existing pagination/checkpoint primitives, coarse replay where affordable, explicit freshness coverage, durable recovery rules, and required failure/restart verification.

Linear syncs issues, comments, projects, project updates, cycles, users, teams, issue relations, and issue history into nine independent raw destinations. Seven resources own update-time windows; relations and history use complete full reads, with history discovering all issues independently of parent progress. Preserve raw relationship IDs and complete issue label names as strings, and leave joins and metrics to ClickHouse. Populate new destinations independently and migrate retained legacy nested comments deliberately.

Treat repeated pagination continuations as permanent provider-protocol errors so reader retries cannot repeatedly replay a cyclic collection.

Add per-integration changelog metadata, shown in registry inspection and integration guides. Keep one draft release per integration in each PR, refresh it in place until merge, and validate release artifacts against the PR base to protect published versions and changelog history.

- afccf6a: Support overlapping ingestion processes with run-scoped journal event identities and validated checkpoint lineage stored entirely in ClickHouse. Stale reads and lost acknowledgements safely replay work without reallocating another run's event identities. Retain valid acknowledged progress when a run has malformed trailing evidence.

Add read-only `ingest doctor` and fingerprint-reviewed `ingest repair`. Recovery preserves a verified full archive and materializes a replacement journal without changing the active configuration. Stop writers, review the snapshot, and explicitly configure the returned journal table before restarting; other namespaces remain intact.

- e3a81c8: Change `paginate()` to yield full `{ items, next, metadata? }` pages, including empty and terminal pages. This is a breaking return-type change: readers must consume `page.items` instead of treating a page as an item array. Metadata passes through unchanged and readers can explicitly map it to checkpoint state, which the existing executor commits after destination acknowledgement. Reject repeated continuations before yielding candidate progress, including a continuation back to the initial cursor. Migrate registry readers and use page metadata for Google Calendar sync-token checkpoints without changing their saved state format.

Simplify Calendar token recovery into the same checkpointed pagination loop and Slack temporary message pagination through full pages with native completion metadata. Remove provider cursor-equality checks now covered by the shared paginator, retaining provider validation, durable timestamp frontiers, and bounded recovery.

- Updated dependencies [cb56b91]
- Updated dependencies [76a0579]
- Updated dependencies [3c546e8]
- @chkit/clickhouse@0.2.0-beta.10
- @chkit/core@0.2.0-beta.10

## 0.2.0-beta.9

### Patch Changes
Expand Down
Loading
Loading