publish datasets with a cache policy
They went up with a content type and nothing else. A dataset names its commit and describes nothing else — it is true forever — and browsers were falling back to heuristic freshness on it, re-downloading 48KB every visitor already had. Cloudflare declined to hold it at the edge at all: cf-cache-status was DYNAMIC on every object in the bucket.
Immutable for the datasets, a minute and a revalidation for the index, which is the one file that changes.
publish datasets with a cache policy
They went up with a content type and nothing else. A dataset names its commit and describes nothing else — it is true forever — and browsers were falling back to heuristic freshness on it, re-downloading 48KB every visitor already had. Cloudflare declined to hold it at the edge at all: cf-cache-status was DYNAMIC on every object in the bucket.
Immutable for the datasets, a minute and a revalidation for the index, which is the one file that changes.
export this repository to the explorer
cqx.yml scores a pull request, which needs no credentials and publishes nothing. This is the half that was missing: a push to main gets exported, so that cqx.bio/samifouad/cqx opens on a dataset that already exists.
Without it the page still worked, which is why nobody noticed — it read the repository from GitHub and ran the analysis in the reader's browser, on every visit. Three seconds here. Eleven on tokio. A dataset names its commit and describes nothing else, so it is written once and cached forever.
The first step says plainly when there is nowhere to publish to, rather than failing four steps later with an AWS error that names no cause. A repository without bucket credentials is not broken — it is unpublished, and the reader's browser already handles that.
Add files via upload
0.1.22: the graph engine ships, and answers in a table
cqx query has worked for four releases and been switched off in every
binary anybody could download. CI built it with --features zega to prove it
compiled and the release built it without, so --zql and --named were
refused everywhere they mattered. They are on now; it costs about 1.2 MB.
And the answer is readable. It printed Row { fields: {...} } — Rust's
derived Debug over a HashMap, so the columns came out in a different order
every run and a reader had to hunt for the field they asked for. It is a
table now, in the order the RETURN clause named, because the clause's own
text is exactly what the engine keyed the map by. --json gives the same
rows as data.
Long cells are cut at forty-four characters and the first forty rows are shown, because past that a terminal is not the tool.
Merge pull request #1169 from dekaruntime/claude/cqx-action
cqx as an action, and an installer instead of a filename
Merge pull request #304 from dekaruntime/claude/cqx-action
cqx as an action, and an installer instead of a filename
0.1.21: say which files were read
Code scanning showed "no summary of scanned files reported by cqx", which reads as a tool that did not look rather than one that found nothing there. SARIF has a place for it and we were leaving it empty.
The run now lists every path the scan read as an analysisTarget — 58 of them for cqx itself, against 24 results.
0.1.20: what the run cost, in the report
The terminal has always printed "58 files · 7,802 lines · 0.1s" and the report carried only the line count, so anything drawing from the JSON could not say the same sentence — the card on a pull request was reduced to a line count and a ref.
The report now carries scan: files, lines, milliseconds, and the version
that produced it.