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
78 changes: 78 additions & 0 deletions .github/workflows/logship.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: logship

on:
workflow_dispatch:
pull_request:
branches: [main]
paths:
- 'log-shipper/**'
- 'scripts/tc959-*.mjs'
- 'docker-compose.dstack-postgres.yaml'
- '.github/workflows/logship.yml'
- 'deploy/ingress/redacted-logging.conf'
push:
branches: [main]
paths:
- 'log-shipper/**'
- 'scripts/tc959-*.mjs'
- 'docker-compose.dstack-postgres.yaml'
- '.github/workflows/logship.yml'
- 'deploy/ingress/redacted-logging.conf'

permissions:
contents: read

jobs:
boundary:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Verify request budgets and hosted acceptance guards
run: node --test log-shipper/budget.test.mjs log-shipper/profile.test.mjs scripts/tc959-docker.test.mjs scripts/tc959-readiness.test.mjs
- name: Check schema provenance and compose boundary without env interpolation
run: node scripts/tc959-check.mjs
- name: Install checksum-pinned native Vector
run: |
curl --fail --location --silent --show-error https://github.com/vectordotdev/vector/releases/download/v0.59.0/vector-0.59.0-x86_64-unknown-linux-gnu.tar.gz --output /tmp/tc959-vector.tar.gz
printf '%s\n' 'fb15878d1cd68445e0658792a8fa7ccf02ae8a353c6cc5d6fe867b171993e19f /tmp/tc959-vector.tar.gz' | sha256sum --check
tar -xzf /tmp/tc959-vector.tar.gz -C /tmp
- name: Run native request and forbidden-value boundary cases
run: |
node scripts/tc959-logship.mjs render-tests /tmp/tc959-errors-slow.json errors_slow
/tmp/vector-x86_64-unknown-linux-gnu/bin/vector test /tmp/tc959-errors-slow.json
node scripts/tc959-logship.mjs render-tests /tmp/tc959-all-requests.json all_requests
/tmp/vector-x86_64-unknown-linux-gnu/bin/vector test /tmp/tc959-all-requests.json
- name: Exercise native UDP-to-HTTP delivery and console leak canaries
run: node log-shipper/native-check.mjs /tmp/vector-x86_64-unknown-linux-gnu/bin/vector
- name: Validate the actual HTTP sink without contacting it
run: |
node scripts/tc959-logship.mjs render-vector /tmp/tc959-runtime.json http://127.0.0.1:9599/
/tmp/vector-x86_64-unknown-linux-gnu/bin/vector validate --no-environment --skip-healthchecks /tmp/tc959-runtime.json

hosted-compose-proof:
needs: boundary
# Only GitHub's disposable Linux VM; never a self-hosted production Docker socket.
runs-on: ubuntu-24.04
timeout-minutes: 12
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Prove exact-compose boundary with immutable public images and synthetic inputs
timeout-minutes: 8
run: node scripts/tc959-docker.mjs --go --ci
- name: Always diagnose before owner-only cleanup, including proof timeout
if: always()
timeout-minutes: 3
run: node scripts/tc959-docker.mjs --go --ci --cleanup-only
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- Account delegation session discovery keyset-pages delegation rows independently of ability fan-out, using a composite delegator/id index so large grant sets are not truncated (TC-1195).
- `/attestation` quotes the SHA-256 of `key_binding` as REPORTDATA and returns it as `key_binding_sha256`; the quote no longer carries the raw binding. Before answering 200 the node checks that the returned TDX v4 quote's REPORTDATA field holds that digest (a structural check; it does not verify the quote). When the TEE can't produce a bound quote, the endpoint returns 503 instead of 200 `mode: "classic"`, and the dstack client reports a guest-agent error status instead of a parse error. `nonce` must be 1-64 characters of `A-Z a-z 0-9 - _` (400 otherwise), and the endpoint now shares the public routes' per-IP rate limit. Verifiers recompute the digest from their own nonce and expected DID and must still verify the quote; see `docs/attestation.md` (TC-963).
- Prepare a compose-only GELF-to-Vector sidecar for the unchanged node 1.20.6 and ingress image digests. The default unsampled `errors_slow` profile emits valid requests with status >=400 or duration strictly over one second; explicit `all_requests` remains available, and all accepted typed WARN/ERROR diagnostics remain eligible for bounded count aggregation. Document eligible-request volume accounting, accepted BEST-EFFORT outage loss, the failed local burst evidence and required zero-observed-loss healthy hosted burst, plus the config-only deployment/rollback privacy packet. No Rust or application image change and no deployment authorization; see `docs/runbooks/tc-959-n0-log-shipping.md` (TC-959 N0).

## [1.20.7] - 2026-10-14

Expand Down
77 changes: 60 additions & 17 deletions docker-compose.dstack-postgres.yaml

Large diffs are not rendered by default.

Loading
Loading