Skip to content

feat: offline fallback for Langfuse + repo quality guardrails#73

Open
michaelpetrik wants to merge 1 commit intolainra:mainfrom
michaelpetrik:feature/offline-mode
Open

feat: offline fallback for Langfuse + repo quality guardrails#73
michaelpetrik wants to merge 1 commit intolainra:mainfrom
michaelpetrik:feature/offline-mode

Conversation

@michaelpetrik
Copy link
Copy Markdown

Summary

  • Offline fallback (src/offlineFallback.js): when Langfuse is unreachable and all retries are exhausted, a lightweight session reference is appended to ~/.claude/telemetry-fallback.jsonl. The reference contains sessionId, userId, org metadata, and cost/token stats — enough to locate the full transcript in local Claude session data (~/.claude/projects/). No retry queue, no replay — just a bookmark.
  • Quality guardrails: first-time baseline bringing the repo up to the node-ts reference standard from zero local enforcement.

Changes

Offline fallback

File Change
src/offlineFallback.js New — writeReference(), getFallbackPath(), JSONL append-only
src/sessionHandler.js finalize() catch block now calls writeReference(this) on flush failure
src/serverHelpers.js createConfig() exposes fallbackFile field
.env.example Documents FALLBACK_FILE env var
docs/ENVIRONMENT_VARIABLES.md FALLBACK_FILE section added
test/unit/offlineFallback.test.js New — dir creation, append, missing metadata, write

Quality guardrails

File What it adds
AGENTS.md Canonical agent doc (was missing; CLAUDE.md is now @AGENTS.md)
.nvmrc Pins Node 22 for local dev
.githooks/pre-commit lint + format:check + staged-file secret scan
scripts/install-hooks.sh One-time hook wiring (npm run hooks:install)
scripts/ci/run_quality_gates.sh Offline-runnable gate: format + lint + unit tests
scripts/ci/run_security_review.sh npm audit + secret scan + docker build smoke
package.json quality, security, hooks:install scripts; AGENTS.md in files[]
.quality/guardrails-report.md Full policy vs enforcement matrix with N/A rows

Prettier was also run across the entire codebase — format:check was never in CI so 41 files had accumulated drift.

Test plan

  • npm run quality passes (format:check + lint + unit tests)
  • npm test — 12 suites, 160 tests all pass
  • CI should pass on this PR (lint, unit tests, docker build, security scan)
  • Manual: verify ~/.claude/telemetry-fallback.jsonl is written when Langfuse is stopped and bridge receives telemetry

Guardrail status summary

Control Status
AGENTS.md / claudecode-conventions enforced
Local hook wiring enforced
Local quality gate enforced
Secret scanning (local) enforced
Pinned toolchain manifest partial (.nvmrc + engines range)
Dep vulnerability audit partial (network-dependent npm audit)
Docker / runtime checks partial (Trivy CI-only)
GitNexus / code intelligence policy-only (bootstrap: npx gitnexus analyze)

🤖 Generated with Claude Code

Offline fallback (src/offlineFallback.js):
- When Langfuse flush fails after retries, write a lightweight session
  reference to ~/.claude/telemetry-fallback.jsonl (JSONL append-only)
- Reference contains sessionId, userId, org, stats — enough to locate
  the full transcript in local Claude session data
- Configurable via FALLBACK_FILE env var
- Synchronous appendFileSync so fallback itself cannot silently fail async
- sessionHandler.js finalize() catch block now calls writeReference(this)
- serverHelpers.js createConfig() exposes fallbackFile config field
- FALLBACK_FILE documented in .env.example and docs/ENVIRONMENT_VARIABLES.md
- Unit tests: test/unit/offlineFallback.test.js (dir creation, append, metadata)

Quality guardrails:
- AGENTS.md created (canonical agent doc); CLAUDE.md reduced to @AGENTS.md
- .nvmrc pins Node 22 for local development
- .githooks/pre-commit: lint + format:check + staged-file secret scan
- scripts/install-hooks.sh: one-time hook wiring (npm run hooks:install)
- scripts/ci/run_quality_gates.sh: offline-runnable format + lint + unit tests
- scripts/ci/run_security_review.sh: npm audit + secret scan + docker build
- package.json: quality, security, hooks:install scripts; AGENTS.md in files[]
- .quality/guardrails-report.md: policy vs enforcement matrix with N/A rows
- prettier --write applied to entire codebase (format:check was never in CI)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@michaelpetrik michaelpetrik requested a review from lainra as a code owner April 3, 2026 16:03
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