Releases: calvinchengx/data-agent-service
Release list
v0.3.0
Images
docker pull ghcr.io/calvinchengx/data-agent-service/executor-py:0.3.0
docker pull ghcr.io/calvinchengx/data-agent-service/executor-go:0.3.0Both answer the same contract (services/contract/openapi.json).
Choose with DAS_EXECUTOR=py|go; see docs/adr/0001-two-executors.md.
What's Changed
- Bump astro from 7.2.1 to 7.2.4 in the docs-site group by @dependabot[bot] in #5
- A family footer: the other ten documentation sites. by @calvinchengx in #6
New Contributors
- @calvinchengx made their first contribution in #6
Full Changelog: v0.2.0...v0.3.0
v0.2.0
Images
docker pull ghcr.io/calvinchengx/data-agent-service/executor-py:0.2.0
docker pull ghcr.io/calvinchengx/data-agent-service/executor-go:0.2.0Both answer the same contract (services/contract/openapi.json).
Choose with DAS_EXECUTOR=py|go; see docs/adr/0001-two-executors.md.
What's Changed
- Bump the actions group with 2 updates by @dependabot[bot] in #4
Full Changelog: v0.1.1...v0.2.0
v0.1.1
Upgrade from 0.1.0
executor-go:0.1.0 had an authorization bypass. The Go guard scanned for
table references only after FROM and JOIN, so every table after a comma was
invisible to it:
SELECT * FROM dbo.fct_sales, other.secrets -- 0.1.0: allowedThe second table escaped the schema allow-list, the cross-database rule, and
the table list that the access rules and the audit line are built from — so a
query could read a schema the source does not permit, and the audit would
record only the first table. The Python executor was never affected.
Four guard fixes, in both implementations
Found by adversarially probing the guards rather than by a failing test — all
four were in code at 90%+ line coverage.
| Was allowed | Now | |
|---|---|---|
| Comma-joined tables (Go only) | FROM a, other.secrets |
refused; every table is checked |
| Table functions | FROM main.read_csv_auto('/etc/passwd') |
refused — a function is not a table |
APPLY over a function |
CROSS APPLY other.f(1) |
refused; CROSS APPLY (SELECT …) still works |
TOP n PERCENT |
reported as a row ceiling of n | refused — a proportion is not a count |
The table-function and APPLY fixes discriminate on parse-tree structure rather
than a list of names, so they cover constructs specific to engines this project
has not met yet. Each is pinned in tests/test_sqlguard.py and in
services/conformance/run.py, which both executors must pass.
New sources
- REST APIs, guarded against their own OpenAPI document: unsafe operations
are never offered, undeclared parameters are refused, and item and body
ceilings are written into the request. An enterprise retrieval service or
knowledge base plugs in this way — seedocs/15-http-sources.md. - DuckDB, for local and lake-file work. Embedded, so it has no per-user
identity: a DuckDB source isauthz_tier=servicepermanently and the
executor refuses one that claims otherwise.docs/03-architecture.md
explains why that is a property of the engine rather than of a deployment.
Both are Python-only; the Go executor has neither, nor Databricks. Recorded
in docs/parity.md and ADR 0001 rather than left to be discovered.
Also
Terraform replaces Bicep. Go 1.26.7. Coverage gated at 90% for both languages.
115 end-to-end witnesses, 30 contract checks against each executor.
Images
docker pull ghcr.io/calvinchengx/data-agent-service/executor-py:0.1.1
docker pull ghcr.io/calvinchengx/data-agent-service/executor-go:0.1.1Both answer the same contract (services/contract/openapi.json) — verified
against these published images, not only against a local build. Choose with
DAS_EXECUTOR=py|go; see docs/adr/0001-two-executors.md.
Full changelog: v0.1.0...v0.1.1
v0.1.0
Images
docker pull ghcr.io/calvinchengx/data-agent-service/executor-py:0.1.0
docker pull ghcr.io/calvinchengx/data-agent-service/executor-go:0.1.0Both answer the same contract (services/contract/openapi.json).
Choose with DAS_EXECUTOR=py|go; see docs/adr/0001-two-executors.md.
Full Changelog: https://github.com/calvinchengx/data-agent-service/commits/v0.1.0