From 6c2040ac13ccdc045ec2d969ea3c8aa82dad4651 Mon Sep 17 00:00:00 2001 From: ZdenekSrotyr Date: Sat, 2 May 2026 08:46:12 +0200 Subject: [PATCH] =?UTF-8?q?docs(readme):=20reflect=200.30.0=20=E2=80=94=20?= =?UTF-8?q?Keboola=20materialized=20parity=20+=20tab=20UI=20+=20analyst=20?= =?UTF-8?q?hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Source-mode table: 'Materialized SQL' row now lists both BigQuery AND Keboola (Keboola gained materialized parity in 0.30.0). - Two-paragraph operator/analyst overview: admin path through /admin/tables tabs + RBAC deep-link; analyst path through da analyst setup hooks. Detail in CHANGELOG.md [0.30.0] and the GitHub Release prose. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 424c27a..56396a6 100644 --- a/README.md +++ b/README.md @@ -43,12 +43,16 @@ The orchestrator scans `/data/extracts/*/extract.duckdb`, attaches each into `an | Mode | Distribution | Sources | Use when | |------|--------------|---------|----------| | **Batch pull** (`local`) | Parquet on disk, scheduled | Keboola | Source has a native bulk-export and the table fits on disk | -| **Materialized SQL** (`materialized`) | Parquet on disk, scheduled query | BigQuery | Source table is too large to mirror; you want a curated subset on disk | +| **Materialized SQL** (`materialized`) | Parquet on disk, scheduled query | BigQuery, Keboola | Source table is too large to mirror as-is; you want a curated subset / aggregate on disk | | **Remote attach** (`remote`) | View only, no download | BigQuery | Table is too large to materialize; latency cost of remote query is acceptable | | **Real-time push** | Incremental parquet | Jira | Source is event-driven and you need sub-minute freshness | The first three modes are what `da sync` distributes to analysts. The fourth is server-side only — analysts query Jira data through the same `da sync`-distributed parquets. +Admins manage per-source registrations through the `/admin/tables` UI (per-connector tabs for BigQuery / Keboola / Jira) or the `da admin register-table` CLI; per-row "Manage access" deep-links to `/admin/access` for granting tables to user groups via `resource_grants(group, ResourceType.TABLE, table_id)`. + +Analysts get a closed loop with Claude Code: `da analyst setup` writes `/.claude/settings.json` with SessionStart (`da sync --quiet`) and SessionEnd (`da sync --upload-only --quiet`) hooks so every Claude Code session starts with fresh RBAC-filtered parquets and ends with the session log uploaded back. + Adding a new source means creating `connectors//extractor.py` that produces `extract.duckdb` with a `_meta` table (`table_name`, `description`, `rows`, `size_bytes`, `extracted_at`, `query_mode`). The orchestrator attaches it automatically. ## Quick Start with Docker