Skip to content

Maintenance: quality workflowz — scheduled audits, canaries, dep automation, 3 bug fixes - #8

Merged
Coriou merged 6 commits into
mainfrom
maintenance/quality-workflowz
Aug 22, 2026
Merged

Coriou merged 6 commits into
mainfrom
maintenance/quality-workflowz

Conversation

@Coriou

@Coriou Coriou commented Aug 22, 2026

Copy link
Copy Markdown
Owner

Sets up the recurring quality system discussed in #discussion, plus the first deep-audit pass.

Always-on automation

  • maintenance.yml (weekly Mon 09:30 UTC + dispatch): bun audit → labeled security issue; full-suite canaries against bun@latest and redis-stack-server:latest; docker build + upsert/query smoke through the deployed artifact. Failures open a maintenance issue with dedup.
  • dependabot.yml: expanded from SDK-only to all bun deps + github-actions + docker + docker-compose ecosystems. @upstash/vector stays ungrouped (compat contract, individual review). TypeScript 7 majors ignored deliberately.
  • Pins: Redis Stack 7.4.0-v8 in CI + compose (digest-identical to current latest, so zero behavior change); Dockerfile oven/bun:1.3-alpine. Floating versions now exist only as explicit canaries that fail loudly.
  • Existing test.yml / weekly SDK-compat workflow unchanged apart from the Redis pin.

First deep-audit pass (procedure documented in docs/RUNBOOK.md)

5 blind finder agents → 15 raw findings → adversarial refutation → 6 confirmed → personally verified:

Fixed:

  • timeout middleware: late rejection of timed-out handlers became unhandledRejection — now observed + logged (regression test)
  • ensureIndex: existing-index check validated dimension only; changing UPVECTOR_METRIC against existing data silently mis-normalized scores — now fails loudly via FT.INFO metric parse (RESP3+RESP2) + unit tests
  • /metrics token: timing-safe compare

Open for triage (docs/audits/2026-08-22-deep-audit.md): Float32 overflow silent (1e300 → ±Infinity stored), /fetch ids-cap stricter than docs, non-atomic namespace reset race.

Also

  • deps: hono 4.12.30 → 4.13.3 clears 4 advisories (incl. SSR memo cross-request disclosure); biome patch bump
  • docs/RUNBOOK.md: triage playbook per failure signal, release gate, deep-audit procedure

Verification

  • Full gate green: 381 tests (247 unit / 60 integration / 74 SDK compat) via scripts/test-all.sh on redis-stack 7.4.0-v8
  • typecheck + Biome clean; actionlint + shellcheck clean on all workflows
  • bun audit: clean on hono 4.13.3

Coriou added 6 commits August 22, 2026 08:45
hono <4.12.34 has 3 moderate + 1 low advisories against our surface
(SSR memo cross-request disclosure, CORS ReDoS, proxy header leak,
language-middleware DoS). 4.13.3 is a caret-range bump; full suite
re-greened. bun audit now clean.
- maintenance.yml (Mon 09:30 UTC): scheduled bun audit -> security
  issue; canary suites against bun@latest and redis-stack@latest ->
  maintenance issue; docker build + upsert/query smoke
- dependabot: bun deps (all), github-actions, docker, docker-compose
  ecosystems; @upstash/vector stays ungrouped for individual review;
  typescript majors ignored (7.x hold)
- pin redis-stack-server 7.4.0-v8 in CI + compose (bit-identical to
  current latest; canary now watches latest explicitly)
- Dockerfile oven/bun 1 -> 1.3-alpine (minor-pinned)

actionlint + shellcheck clean.
…-safe metrics token

- timeout middleware: attach an observer to the losing next() chain so
  a late rejection logs instead of becoming an unhandledRejection
- ensureIndex: parse DISTANCE_METRIC from FT.INFO (RESP3 + RESP2) and
  fail loudly when an existing index was built under a different
  UPVECTOR_METRIC; previously only dimension was validated, so a
  metric change silently mis-normalized scores
- /metrics token: timingSafeEqual with length pre-check, matching the
  main auth middleware

381 tests (247 unit / 60 integration / 74 compat) green via
scripts/test-all.sh against redis-stack 7.4.0-v8.
RUNBOOK.md documents the recurring system: automation inventory,
triage playbook per failure signal, release gate, and the deep-audit
workflowz (parallel adversarial finders + refute-voting). First run
recorded in docs/audits/2026-08-22-deep-audit.md: 15 raw findings,
6 confirmed, 3 fixed, 3 open for triage.
- ensureIndex: compare FT.INFO metric against the Redis-native name
  (toRedisDistanceMetric) — raw config values (EUCLIDEAN/DOT_PRODUCT)
  would have spuriously failed every already-exists check for 2 of 3
  metrics
- syncIndexes/loadDimension: validate metric compatibility at boot and
  cold-cache paths too; previously only the already-exists branch
  checked, so a restart with a changed UPVECTOR_METRIC stayed silent;
  ValidationError rethrown instead of swallowed by generic catches
- timeout middleware: attach the late-rejection observer inside the
  timeout branch only — unconditional attachment mislabeled every fast
  handler error as "late failure after request timeout"
- maintenance.yml canary-bun: drop UPVECTOR_TOKEN=test step export that
  conflicted with the test-token-123 server env (guaranteed 401s)
- docs: README counts 372/238 -> 381/249-unit table rows, pin
  redis-stack-server in README side-by-side example, CLAUDE.md
  container line matches Dockerfile pin

Full gate green: 383 tests (249 unit / 60 integration / 74 compat).
@Coriou
Coriou merged commit 301695b into main Aug 22, 2026
2 checks passed
@Coriou
Coriou deleted the maintenance/quality-workflowz branch August 22, 2026 07:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant