Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
179 commits
Select commit Hold shift + click to select a range
d4f3e27
feat(tooling): add manifest-complete consumer endpoint benchmark
BobbyAxerol Sep 22, 2026
cec7f7c
docs(plan): record bounded BAR interval verification and diagnostic risk
BobbyAxerol Sep 22, 2026
0a22696
docs(plan): scope three-phase read-plane stability and capacity closure
BobbyAxerol Sep 22, 2026
a3fea33
fix(query): bound global gap diagnostics
BobbyAxerol Sep 22, 2026
13b3594
feat(query): isolate hot read capacity lanes
BobbyAxerol Sep 22, 2026
eff1222
docs(plan): record phase2 query candidate
BobbyAxerol Sep 22, 2026
43301d7
fix(query): preserve bounded TS hot-read admission
BobbyAxerol Sep 22, 2026
aa316ed
docs(plan): close phase2 query capacity
BobbyAxerol Sep 22, 2026
2e6036d
test(certification): add bounded phase3 consumer load driver
BobbyAxerol Sep 22, 2026
42c7e28
fix(certification): mount phase3 planner into runtime package
BobbyAxerol Sep 22, 2026
4a831e2
fix(certification): harden phase3 client bootstrap
BobbyAxerol Sep 22, 2026
d7c8120
fix(certification): initialize phase3 load pacer slots
BobbyAxerol Sep 22, 2026
79bbf4c
fix(certification): separate phase3 pacing from endpoint latency
BobbyAxerol Sep 22, 2026
8330c4a
fix(certification): require phase3 stage coverage
BobbyAxerol Sep 22, 2026
7492a9b
fix(certification): derive phase3 supplemental streams
BobbyAxerol Sep 22, 2026
32fa367
fix(certification): honor phase3 stream buffer quotas
BobbyAxerol Sep 22, 2026
e27915e
test(certification): expose phase3 stream quality diagnostics
BobbyAxerol Sep 22, 2026
6d63fdd
fix(certification): reserve phase3 snapshot stream handoffs
BobbyAxerol Sep 22, 2026
f288182
fix(stream): recheck replay freshness before delivery
BobbyAxerol Sep 22, 2026
39b089f
docs(plan): record phase3 stream candidate evidence
BobbyAxerol Sep 22, 2026
913b5f1
docs(plan): record phase3 stream rollout approval
BobbyAxerol Sep 23, 2026
2a0a3da
docs(plan): record phase3 stream gap evidence
BobbyAxerol Sep 23, 2026
25ff16e
fix(bar): recover bounded native final bar gaps
BobbyAxerol Sep 23, 2026
d65b94d
fix(phase3): retain bar gaps and correct load acceptance lifecycle
BobbyAxerol Sep 23, 2026
06b6cfe
fix(query): remove cancelled FIFO waiters and restore lane progress
BobbyAxerol Sep 23, 2026
cf0bf8c
docs: align v2.1.1 closure with 50-alpha and TS capacity target
BobbyAxerol Sep 23, 2026
3e32fda
docs(plan): record the Query FIFO rollout and its runtime read-back
BobbyAxerol Sep 23, 2026
fdbf2f3
docs(plan): record the BAR recovery rollout and the pinned three-open…
BobbyAxerol Sep 23, 2026
5e43ee9
docs(plan): record the v2.1.1 closure approval, quota option A and co…
BobbyAxerol Sep 23, 2026
8e9e7ab
feat(certification): plan the frozen four-class v2.1.1 target workload
BobbyAxerol Sep 23, 2026
ae2d62a
feat(consumer): raise the alpha platform identity quotas for the v2.1…
BobbyAxerol Sep 23, 2026
5a83761
docs(plan): record the quota A rollout and root-cause the 07:44Z cons…
BobbyAxerol Sep 23, 2026
0fbfd9f
docs(plan): record the eight-open OKX outage repair packet and the ta…
BobbyAxerol Sep 23, 2026
9dd2007
feat(certification): run the frozen v2.1.1 target workload at its dec…
BobbyAxerol Sep 23, 2026
8219ecb
fix(query): render large warmup responses off the event loop
BobbyAxerol Sep 23, 2026
b5aed2a
fix(certification): attribute target-run tails and stop counting serv…
BobbyAxerol Sep 23, 2026
434bbe5
fix(spool): serve hot single-statement reads on their own connection
BobbyAxerol Sep 23, 2026
a282305
perf(query): read the latest final BAR through the exact header index
BobbyAxerol Sep 23, 2026
3b65011
perf(query): shorten the reader's GIL switch interval; retain Query a…
BobbyAxerol Sep 23, 2026
9cf40c2
perf(query): encode large warmup responses in chunks
BobbyAxerol Sep 23, 2026
e0d9401
fix(query): give warmups of at most two rows their own bounded lane
BobbyAxerol Sep 23, 2026
99e3896
perf(query): raise the reader's GC thresholds and freeze its start-up…
BobbyAxerol Sep 23, 2026
5624fe9
fix(certification): give each latency probe its own phase
BobbyAxerol Sep 23, 2026
9475072
docs(plan): record stage 35, the stage-50 Query OOM and the memory pa…
BobbyAxerol Sep 23, 2026
e680192
fix(certification): make the final run's fault windows fire; retain Q…
BobbyAxerol Sep 23, 2026
0070d74
fix(query,stream): serve alpha MARK/INDEX from the live view; queue c…
BobbyAxerol Sep 23, 2026
b25797d
perf(query): duty-cycle cold reads so hot requests keep the GIL; boun…
BobbyAxerol Sep 23, 2026
94f2db4
perf(query): serve alpha MARK/INDEX in-process from the replica's own…
BobbyAxerol Sep 23, 2026
83fa1bc
feat(stream,query): ingest spans for the writer; alpha MARK judged by…
BobbyAxerol Sep 23, 2026
bbd469e
docs: append Astra Kafka-native architecture assessment and four-phas…
BobbyAxerol Sep 23, 2026
4f91db5
docs: assess Astra addendum and merge the Kafka-native four-phase plan
BobbyAxerol Sep 23, 2026
f39eae2
docs: Opus final rebuttal and step-by-step runbook for the Kafka-nati…
BobbyAxerol Sep 23, 2026
35e4a63
docs: check the Kafka-native proposal against program invariants
BobbyAxerol Sep 23, 2026
74337e7
docs: refine the Kafka-native proposal to the V2 Rust-first target
BobbyAxerol Sep 23, 2026
d5f3cf4
docs: publish approved five-phase Kafka-native Rust execution guide
BobbyAxerol Sep 23, 2026
9449a03
fix(stream): read the gateway subscriber count property in ingest spans
BobbyAxerol Sep 23, 2026
eba29fc
feat(kn): read-only baseline inventory for the Kafka-native rearchite…
BobbyAxerol Sep 23, 2026
4741740
feat(contracts): freeze cursor v3 and Kafka-native state contracts
BobbyAxerol Sep 23, 2026
469ff4e
feat(kn): measure payload, cache, CPU and Kafka sizing; freeze the ca…
BobbyAxerol Sep 23, 2026
9e2e8ec
feat(kn): native Rust stream gateway vertical slice with real SDK proof
BobbyAxerol Sep 23, 2026
14c19a7
docs(kn): KN-1 tracker fields, slice table and Astra receipt in the g…
BobbyAxerol Sep 23, 2026
f163d14
fix(kn): KN-1 review F1/F2/F4 - native requirement validation, checke…
BobbyAxerol Sep 23, 2026
80d94f9
fix(kn): KN-1 review F3/F5/F6 - slice verdict and exit code, guarded …
BobbyAxerol Sep 23, 2026
bc9664e
docs(kn): KN-1 review fixes - capture-slice rerun PASS, slice table a…
BobbyAxerol Sep 23, 2026
b17d23f
docs(kn): record Astra KN-1 review and focused closure checklist
BobbyAxerol Sep 24, 2026
56a26f5
fix(kn): close KN-1 review evidence gaps - edge/order vectors, nbf, f…
BobbyAxerol Sep 24, 2026
a0eaf89
docs(kn): record Astra re-review and remaining F3 F5 closure
BobbyAxerol Sep 24, 2026
078f994
fix(kn): close KN-1 R2 residuals - exact slice coverage, lossless LPK…
BobbyAxerol Sep 24, 2026
6802b33
docs(kn): accept KN-1 review and record bounded resource direction
BobbyAxerol Sep 24, 2026
997907c
feat(kn): KN-2 native Stream service - shared reader, barrier replay,…
BobbyAxerol Sep 24, 2026
d8929d1
feat(kn): KN-2 slice 2 - coalesced replay, graceful failover, bounded…
BobbyAxerol Sep 24, 2026
e3b8325
docs(kn): record KN-2 Astra findings and focused closure gates
BobbyAxerol Sep 24, 2026
d646c99
fix(kn): close KN-2 Astra R1 F1-F5 - revocation, corrupt records, joi…
BobbyAxerol Sep 24, 2026
7ac6d43
test(kn): close KN-2 review and freeze KN-3 entry decisions
BobbyAxerol Sep 24, 2026
0b6cea6
feat(kn): KN-3 slice 1 - projector stage A transactional engine
BobbyAxerol Sep 24, 2026
916883c
feat(kn): KN-3 slice 2 - state topic and ACL provision packet (K3.1)
BobbyAxerol Sep 24, 2026
65443fa
feat(kn): KN-3 slice 3 - state codecs for state topics and market cac…
BobbyAxerol Sep 24, 2026
e3d3746
feat(kn): KN-3 slice 4 - projector stage B and fenced market cache (K…
BobbyAxerol Sep 24, 2026
a413c41
feat(kn): KN-3 slice 5 - stage A product classification from the gate…
BobbyAxerol Sep 24, 2026
1abf811
feat(kn): KN-3 slice 6 - bounded BAR expiry with transactional floor …
BobbyAxerol Sep 24, 2026
ed0275f
feat(kn): KN-3 slice 7 - per-product rebuild without dual write, bars…
BobbyAxerol Sep 24, 2026
0fa25bd
feat(kn): KN-3 slice 8 - legacy BAR import and market-cache BAR readb…
BobbyAxerol Sep 24, 2026
1f9e220
feat(kn): KN-3 slice 9 - qdl-projector binary, D15 cap per the KN-1 b…
BobbyAxerol Sep 24, 2026
bc397e7
fix(kn): KN-3 slice 10 - full-flow run on real data; stage B recovery…
BobbyAxerol Sep 24, 2026
c65d72e
docs(kn): KN-3 receipt for Astra review - status IMPLEMENTED_PENDING_…
BobbyAxerol Sep 24, 2026
8c50cfa
fix(kn): KN-3 slice 11 - Astra R1 F1-F4 (memory pressure rewind, floo…
BobbyAxerol Sep 24, 2026
1ef875a
fix(kn): KN-3 slice 12 - Astra R2 residuals: no batch lost on read-pa…
BobbyAxerol Sep 25, 2026
b6874e8
fix(kn): KN-3 slice 13 - Astra R3: a rebuild never deletes a generati…
BobbyAxerol Sep 25, 2026
f0380a4
fix(kn): KN-3 slice 14 - Astra R4: a never-ready product is rebuilt a…
BobbyAxerol Sep 25, 2026
2c85adf
feat(kn): KN-4 slice 1 - projector source watermarks for cursor v3 bo…
BobbyAxerol Sep 25, 2026
862c696
feat(kn): KN-4 slice 2 - Query backend over the market cache with cur…
BobbyAxerol Sep 25, 2026
5f7c629
fix(kn): KN-4 slice 3 - Query lanes admit fleet bursts, cancelled wor…
BobbyAxerol Sep 25, 2026
d05d983
feat(kn): KN-4 slice 4 - Stream GetSnapshot/GetFeedStatus on the mark…
BobbyAxerol Sep 25, 2026
29df556
fix(sdk): KN-4 slice 5 - SDK accepts Kafka offset 0 as a stream recor…
BobbyAxerol Sep 25, 2026
ccec85c
test(kn): KN-4 slice 6 - shadow scope and kn4-matrix mode in the Phas…
BobbyAxerol Sep 25, 2026
0bdeeaf
docs(kn): KN-4 isolated shadow runtime packet (recorded before start)
BobbyAxerol Sep 25, 2026
abd036c
fix(kn): KN-4 slice 7 - gap-scan shutdown no longer waits on itself, …
BobbyAxerol Sep 25, 2026
dd94e2f
docs(kn): KN-4 shadow run receipt - stopped on the TS stop condition,…
BobbyAxerol Sep 25, 2026
67ec351
docs(kn): record KN-3 ASTRA_REVIEW_PASS at f0380a4 and the owner's KN…
BobbyAxerol Sep 25, 2026
7a6dbd7
fix(kn): KN-4 slice 8 - MARK/INDEX cache view never answers a cache, …
BobbyAxerol Sep 25, 2026
fa0f0db
feat(kn): KN-4 slice 9 - canonical Kafka mirror for the live shadow i…
BobbyAxerol Sep 25, 2026
c0f86e0
fix(kn): KN-4 slice 10 - MARK/INDEX pair lineage required on every re…
BobbyAxerol Sep 25, 2026
f708ba3
perf(kn): KN-4 slice 11 - warmup renders one chunk of views at a time…
BobbyAxerol Sep 25, 2026
619663b
test(kn): KN-4 slice 12 - handoff judged over a fixed canonical bound…
BobbyAxerol Sep 25, 2026
c328974
test(kn): KN-4 slice 13 - probe matrix over the mirrored live log: wi…
BobbyAxerol Sep 25, 2026
fface8c
docs(kn): KN-4 watched shadow packet with the canonical mirror (D38/D…
BobbyAxerol Sep 25, 2026
173e7b2
fix(kn): KN-4 slice 14 - canonical mirror names a unique group in the…
BobbyAxerol Sep 25, 2026
b13e86b
fix(kn): KN-4 slice 15 - bound the canonical mirror's prefetch and pr…
BobbyAxerol Sep 25, 2026
67cfd8a
fix(kn): KN-4 slice 16 - canonical mirror resumes from what the isola…
BobbyAxerol Sep 25, 2026
e10af5f
docs(kn): KN-4 watched shadow run receipt - stopped on the TS conditi…
BobbyAxerol Sep 25, 2026
136e384
docs(kn): owner decisions D42-D45 and the rust_core_2 CPU capacity pa…
BobbyAxerol Sep 25, 2026
e656580
docs(kn): D42 applied and measured; sequential reusable shadow bootst…
BobbyAxerol Sep 25, 2026
c04e33b
fix(kn): KN-4 slice 17 - paced live-spool history export in short pag…
BobbyAxerol Sep 25, 2026
b41324b
feat(kn): KN-4 slice 18 - checkpointed history import resumes from co…
BobbyAxerol Sep 25, 2026
4e63525
docs(kn): fourth watched attempt - live-spool reads disturb the old w…
BobbyAxerol Sep 25, 2026
311e030
docs(kn): owner decision D46 - no spool history migration; history fr…
BobbyAxerol Sep 25, 2026
13bdb0e
docs(kn): D46 inventory and plan D47 - KN BAR history from the venues…
BobbyAxerol Sep 25, 2026
e629bd7
fix(kn): KN-4 slice 19 - BAR readback epoch, never-materialized produ…
BobbyAxerol Sep 25, 2026
b92004c
chore(kn): carry the owner-approved rust_core_2 1.0 vCPU into the sta…
BobbyAxerol Sep 25, 2026
24531d4
feat(kn): KN-4 slice 20 - BAR edge venue calls behind the Rust provid…
BobbyAxerol Sep 25, 2026
3814e16
feat(kn): KN-4 slice 21 - venue history by demand with downstream bac…
BobbyAxerol Sep 25, 2026
84fabec
feat(kn): KN-4 slice 22 - history/live join boundary, history-only ed…
BobbyAxerol Sep 25, 2026
0ea3850
feat(kn): KN-4 slice 23 - admission lanes for the KN bar edge, a quar…
BobbyAxerol Sep 25, 2026
d814771
docs(kn): KN-4 D47 shadow packet - venue history through an isolated …
BobbyAxerol Sep 25, 2026
62509bd
docs(kn): D47 shadow receipt part 1 - pipeline, live mirror and venue…
BobbyAxerol Sep 25, 2026
717f560
fix(kn): KN-4 slice 24 - live-log probe judges each wave inside its o…
BobbyAxerol Sep 25, 2026
1213fd5
fix(kn): KN-4 slice 25 - live-log probe boundary taken before the str…
BobbyAxerol Sep 25, 2026
eaac3a8
fix(kn): KN-4 slice 26 - harness mounts the probe beside its driver; …
BobbyAxerol Sep 25, 2026
4292afe
fix(kn): KN-4 slice 27 - fixed-window handoff reads through a pump, i…
BobbyAxerol Sep 25, 2026
9f98b21
docs(kn): KN-4 T07 and stage 20/35 on the D47 shadow
BobbyAxerol Sep 25, 2026
91a7832
fix(kn): KN-4 slice 28 - session read clock, session-named staleness,…
BobbyAxerol Sep 26, 2026
db65704
feat(kn): KN-4 slice 29 - a refusal carries the quality it was decide…
BobbyAxerol Sep 26, 2026
3b853f5
fix(kn): KN-4 slice 30 - bounded mirror log, coordinate-exact diagnos…
BobbyAxerol Sep 26, 2026
81b8f4e
test(kn): KN-4 slice 31 - keep the history-fill fixture from patching…
BobbyAxerol Sep 26, 2026
f6606ad
fix(kn): KN-4 slice 32 - the probe keeps delivered identities for BAR…
BobbyAxerol Sep 26, 2026
718ddac
docs(kn): KN-4 Astra review items on the resumed shadow; implemented,…
BobbyAxerol Sep 26, 2026
d64f279
fix(kn): KN-4 slice 33 - judge session and event age at the end of th…
BobbyAxerol Sep 26, 2026
abda016
fix(kn): KN-4 slice 34 - judge the live-log matrix in the window its …
BobbyAxerol Sep 26, 2026
f176ad6
docs(kn): KN-4 re-review closed on kn4-abda016; receipt v2 with corre…
BobbyAxerol Sep 26, 2026
86e15e8
fix(sdk): bound universe warmup and reuse signed bar handoff
BobbyAxerol Sep 26, 2026
2da88a9
test(kn): add bounded universe latency probe and consumer handoff con…
BobbyAxerol Sep 26, 2026
c22f4d3
feat(reference): complete OKX contract analytics with shared Rust adm…
BobbyAxerol Sep 26, 2026
718631d
feat(kn): K5.1 - D48 daily market-cap universe admitted in source; ha…
BobbyAxerol Sep 26, 2026
e8d3435
fix(kn5): preserve demand ownership and close reference review gaps
BobbyAxerol Sep 26, 2026
1643049
fix(kn): index exact BAR diagnostics and measure completed consumer w…
BobbyAxerol Sep 26, 2026
5242526
fix(kn): preserve history demand and legacy SDK error compatibility
BobbyAxerol Sep 26, 2026
1455182
fix(kn): bound checkpoint history to valid source timestamps
BobbyAxerol Sep 26, 2026
a590193
fix(kn): compact diagnostic reads and isolate provider history gaps
BobbyAxerol Sep 26, 2026
ddfe7a6
fix(benchmark): construct universe client with stable TLS contract
BobbyAxerol Sep 26, 2026
822a150
fix(kn): validate full provider history windows and native BAR closes
BobbyAxerol Sep 26, 2026
20e5062
perf(kn): materialize bounded BAR diagnostic runs atomically
BobbyAxerol Sep 26, 2026
a95310a
docs(kn): record diagnostic and reference acceptance with load failures
BobbyAxerol Sep 26, 2026
6f1d6ed
perf(query): chunk batch warmup rendering under the cold-work lease
BobbyAxerol Sep 26, 2026
9e81171
fix(query): keep prefetched history validation in bounded cold worker
BobbyAxerol Sep 26, 2026
21fda1d
fix(kn): bound universe batches and verify slow-reader recovery honestly
BobbyAxerol Sep 26, 2026
2dad966
fix(sdk): recover bounded cold admission without retrying quality fai…
BobbyAxerol Sep 26, 2026
b80e01b
docs(kn5): bind fresh load and consumer-cache evidence for independen…
BobbyAxerol Sep 26, 2026
81d4912
fix(kn5): close catalog and diagnostic gaps and measure full cache ca…
BobbyAxerol Sep 27, 2026
02cd827
build(kn5): verify pinned dependency image when locked packages are u…
BobbyAxerol Sep 27, 2026
82da45f
docs(kn5): attest packaged candidate and retain explicit production e…
BobbyAxerol Sep 27, 2026
a5de53d
ops(kn5): prepare bounded native runtime and exact rollback packet
BobbyAxerol Sep 27, 2026
56d1a9f
fix(kn5): distinguish inherited Kafka settings from topic drift
BobbyAxerol Sep 27, 2026
6400b49
fix(kn5): grant metadata-only access to native projector readers
BobbyAxerol Sep 27, 2026
89eeb99
fix(kn5): authenticate bounded history backpressure on production Kafka
BobbyAxerol Sep 27, 2026
5079695
fix(ops): validate effective producer revisions before paired handoff
BobbyAxerol Sep 27, 2026
1b496d7
fix(bar): yield history bootstrap to live final-bar scheduling
BobbyAxerol Sep 27, 2026
ffe7d2e
fix(certification): isolate final workload from concurrent probes
BobbyAxerol Sep 27, 2026
4fe7e92
fix(kn): exclude quarantined VN SDK and record production handoff
BobbyAxerol Sep 27, 2026
679dc77
test(kn): preserve retired metadata and pin clean packet artifact
BobbyAxerol Sep 27, 2026
8b5e68f
test(kn): reconcile retired products and verify clean runtime packaging
BobbyAxerol Sep 27, 2026
059c4ae
test(kn): align coverage schemas and retired reference scope
BobbyAxerol Sep 27, 2026
5af9a21
fix(sdk): persist stream cursors asynchronously with durable fencing
BobbyAxerol Sep 27, 2026
956045d
fix(sdk): drain cancelled shutdown before releasing cursor ownership
BobbyAxerol Sep 27, 2026
d3bbe22
docs(kn5): record cursor recovery acceptance and remaining SDK handoff
BobbyAxerol Sep 27, 2026
3ccb8ee
fix(sdk): drain cursor writes during global task shutdown
BobbyAxerol Sep 27, 2026
28a6f07
docs(kn5): record shutdown-safe reader production acceptance
BobbyAxerol Sep 27, 2026
ea6a0e4
release(kn): certify v2.2.0 runtime and bind consumer SDK artifacts
BobbyAxerol Sep 27, 2026
b894ecd
docs: reconcile KN release reader and rollback runbook
BobbyAxerol Sep 27, 2026
d9d853f
docs(kn5): record scoped release image and cache cleanup
BobbyAxerol Sep 27, 2026
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
64 changes: 61 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,11 @@ jobs:

- name: Build and import standalone SDK wheel
run: |
python scripts/build_qdl_sdk_release.py --output-dir /tmp/qdl-sdk
python -m pip install --disable-pip-version-check /tmp/qdl-sdk/qdl_sdk-2.0.3-py3-none-any.whl
python scripts/build_qdl_sdk_release.py --output-dir /tmp/qdl-sdk > /tmp/qdl-sdk-build.json
WHEEL=$(python -c 'import json; print(json.load(open("/tmp/qdl-sdk-build.json"))["wheel"])')
python -m pip install --disable-pip-version-check "/tmp/qdl-sdk/$WHEEL"
cd "$(mktemp -d)"
PYTHONPATH= python -c 'import qdl_sdk; assert qdl_sdk.__version__ == "2.0.3"'
PYTHONPATH= python -c 'import json, qdl_sdk; assert qdl_sdk.__version__ == json.load(open("/tmp/qdl-sdk-build.json"))["version"]'

unit-tests:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -145,6 +146,18 @@ jobs:
docker compose -f docker-compose.yml -f docker-compose.ci.yml
run --rm test_runner python -m unittest discover -s tests

- name: Run KN Query and BAR readback against isolated Redis
run: |
docker run --rm -d --name kn-python-redis --network none \
--memory 128m --cpus 0.5 \
redis@sha256:dfa18828cbc07b3ae6a95ec7343f6c214fdee2d836197b4be8e9904420762cd8 \
redis-server --save "" --appendonly no
trap 'docker stop -t 5 kn-python-redis' EXIT
docker run --rm --network container:kn-python-redis \
-e QDL_KN_TEST_REDIS=redis://127.0.0.1:6379/0 \
"${QDL_CI_IMAGE}" python -m unittest -v \
tests.test_kn_query_backend tests.test_kn_bar_readback

- name: Run V2 contract, SDK and shadow-consumer gates
run: >-
docker compose -f docker-compose.yml -f docker-compose.ci.yml
Expand Down Expand Up @@ -254,3 +267,48 @@ jobs:
run: >-
docker compose -f docker-compose.yml -f docker-compose.ci.yml
down --volumes --remove-orphans

kn-native-integration:
# KN-1 K1.6: native gateway reads against a real, isolated Kafka broker.
# The test is `#[ignore]` in the workspace run and fails loudly here if
# the broker is missing; it never contacts a shared or production broker.
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4

- name: Start isolated Kafka (KRaft, plaintext, no ACLs)
run: |
docker run -d --name kn-kafka --hostname localhost \
-e KAFKA_HEAP_OPTS="-Xmx512m -Xms256m" \
apache/kafka@sha256:9516fb7634bad307d17c33b589fde9023003b0cb761374f500002b980a3149b9
for attempt in $(seq 1 60); do
if docker exec kn-kafka /opt/kafka/bin/kafka-broker-api-versions.sh \
--bootstrap-server localhost:9092 >/dev/null 2>&1; then
exit 0
fi
sleep 2
done
docker logs kn-kafka | tail -50
exit 1

- name: Start isolated Redis (market-cache image; one shared, one dedicated to the memory-full test)
run: |
for port in 6379 6380; do
docker run -d --name kn-redis-$port --network container:kn-kafka \
redis@sha256:dfa18828cbc07b3ae6a95ec7343f6c214fdee2d836197b4be8e9904420762cd8 \
redis-server --port $port --save "" --appendonly no
done

- name: Committed reads, no-commit reader, projector stage A/B, market cache (Kafka + Redis)
run: |
docker run --rm --network container:kn-kafka \
-e QDL_KN_TEST_KAFKA=localhost:9092 \
-e QDL_KN_TEST_REDIS=redis://localhost:6379/0 \
-e QDL_KN_TEST_REDIS_EXCLUSIVE=redis://localhost:6380/0 \
-v "$PWD:/workspace" -w /workspace rust:1.82-slim \
sh -c 'apt-get update -qq && apt-get install -y --no-install-recommends clang cmake libclang-dev libcurl4-openssl-dev libssl-dev libzstd-dev make pkg-config zlib1g-dev >/dev/null && cargo test -p qdl-stream-gateway --test committed_reads --locked -- --ignored && cargo test -p qdl-projector --locked -- --ignored --test-threads=1'

- name: Remove isolated Kafka and Redis
if: always()
run: docker rm -f kn-redis-6379 kn-redis-6380 kn-kafka
30 changes: 28 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ jobs:
run: |
git merge-base --is-ancestor "$GITHUB_SHA" origin/main
python3 - <<'PY'
import hashlib
import json
import os
from pathlib import Path
Expand All @@ -33,11 +34,32 @@ jobs:
if not re.fullmatch(r'v2\.\d+\.\d+', tag):
raise SystemExit('Expected a stable v2 semantic-version tag')
root = Path('upgrade/evidence/releases') / tag
if json.loads((root / 'certificate.json').read_text())['status'] != 'PASS':
certificate = json.loads((root / 'certificate.json').read_text())
if certificate['status'] != 'PASS':
raise SystemExit('Release certificate is not PASS')
if hashlib.sha256((root / 'endpoint-report.json').read_bytes()).hexdigest() != certificate['endpoint_report_sha256']:
raise SystemExit('Endpoint report differs from certified evidence')
if not (root / 'RELEASE_NOTES.md').is_file():
raise SystemExit('Release notes are missing')
PY
- name: Build and verify certified SDK artifact
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
python3 scripts/build_qdl_sdk_release.py --output-dir "$RUNNER_TEMP/qdl-sdk"
python3 - <<'PYCODE'
import hashlib
import json
import os
from pathlib import Path
certificate = json.loads((Path('upgrade/evidence/releases') / os.environ['RELEASE_TAG'] / 'certificate.json').read_text())
root = Path(os.environ['RUNNER_TEMP']) / 'qdl-sdk'
wheels = list(root.glob('*.whl'))
if len(wheels) != 1:
raise SystemExit('Expected exactly one SDK wheel')
if hashlib.sha256(wheels[0].read_bytes()).hexdigest() != certificate['sdk']['wheel_sha256']:
raise SystemExit('Tagged SDK differs from certified consumer artifact')
PYCODE
- name: Publish immutable tag and public evidence
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -47,4 +69,8 @@ jobs:
gh release create "$RELEASE_TAG" --verify-tag \
--title "Quant Data Layer $RELEASE_TAG" \
--notes-file "$evidence/RELEASE_NOTES.md" \
"$evidence/certificate.json"
"$evidence/certificate.json" \
"$evidence/endpoint-report.json" \
"$RUNNER_TEMP/qdl-sdk/"*.whl \
"$RUNNER_TEMP/qdl-sdk/"*.release.json \
"$RUNNER_TEMP/qdl-sdk/"*.cdx.json
Loading
Loading