Browse our archives by topic…
Blog
Browse our blogs activity over the years…
How to Implement Augmentation in RAG
Understand the augmentation step of RAG: how retrieved documents are structured into prompts, how metadata and citations improve response quality, and how to avoid common pitfalls like prompt injection.
How to Implement Retrieval in RAG
Understand the retrieval step of RAG: Learn how database queries, keyword search, vector search, and hybrid approaches find the right information to ground your LLM responses.
TypeDeclaration: An Abstraction for Understanding JSON Schema
The Corvus.Json.CodeGeneration library analyses JSON Schema and builds a TypeDeclaration tree that maps schema patterns to code patterns. The code generator, CLI tool, source generator, and Blazor playground all consume the same abstraction - and you can too.
Optimising DAX: Practical Examples
The final post in the Optimising DAX series: the CALCULATE trap, variables and IF.EAGER, slicer costs, and a practical approach to isolating slow queries.
Optimising DAX: Data Materialisation
Data materialisation is when the storage engine gives up on efficient processing and rebuilds the entire table. This post explains what triggers it, why it's expensive, and how to delay it.
Building API Reference Documentation From Code, Part 2: Under the Hood
A deep dive into the cross-assembly linking, PDB-based source links, TFM scanning, enrichment merging, and search indexing that power our API reference documentation pipeline.
Building API Reference Documentation From Code, Part 1: The Pipeline
We generate about 8,800 API reference pages from 16 libraries across two engine versions, with source links, TFM availability badges, and hand-authored enrichments - all from a single PowerShell pipeline. Here's how.
Writing Effective Copilot Instructions for Complex Codebases
A flat copilot-instructions.md works for small projects. When your codebase hits 500k lines, 19 projects, and multiple code generators, you need something more structured. Here's how we built a modular skills library for Corvus.Text.Json - and the design principles that make it work.
Optimising DAX: The Formula Engine and Storage Engine
When you execute a DAX query, two engines divide up the work. Understanding the split between the formula engine and the storage engine is key to writing performant DAX.
Your Cloud AI SLA Tells You Less Than You Think
Traditional cloud SLAs measure API uptime, not behavioural stability. This post talks about how silent AI model drift can quietly break your agents and the questions you might want to ask vendors.
Trying Out WSL Containers: Microsoft's Built-In Alternative to Docker Desktop
Microsoft's new WSL Containers (wslc) promises container management on Windows without Docker Desktop. I tried it with dev containers, Aspire, and Docker Compose - here's what works, what doesn't, and whether you should switch yet.
AsyncAPI Code Generation with Corvus: Custom Transports
Implement a custom IMessageTransport for brokers not covered by the built-in packages - PublishAsync, SubscribeAsync, RequestAsync, dead-letter routing, and optional health check support.
AsyncAPI Code Generation with Corvus: Testing
Test Corvus-generated AsyncAPI producers and consumers without a running broker - unit test handler logic with typed payloads, verify producer output with message capture, and integration test the full publish-consume round-trip using InMemoryMessageTransport.
AsyncAPI Code Generation with Corvus: Filtering
Generate producers and consumers for only the channels you need - use channel filtering, tag selection, and the asyncapi-show preview command to carve focused messaging code from large AsyncAPI specifications.
AsyncAPI Code Generation with Corvus: Durability and Resumption
Configure durable message delivery for Corvus-generated AsyncAPI consumers - Kafka consumer groups, AMQP acknowledgement, NATS JetStream, MQTT persistent sessions, and Azure Service Bus PeekLock settlement.
AsyncAPI Code Generation with Corvus: Health and Telemetry
Add observability to Corvus-generated AsyncAPI producers and consumers - OpenTelemetry distributed tracing, message throughput metrics, processing loop heartbeats, and ASP.NET Core health checks for transport connectivity.
AsyncAPI Code Generation with Corvus: Request/Reply
Generate typed request/reply methods from AsyncAPI specs with Corvus - correlated messaging with zero-allocation correlation IDs, typed response payloads, timeout management, and support for both AsyncAPI 3.0 reply objects and 2.6 x-corvus-reply extensions.
AsyncAPI Code Generation with Corvus: Typed Consumers
Generate typed message consumers from AsyncAPI specs with Corvus - handler interfaces with pre-validated payloads, configurable error policies, dead-letter routing, and Polly resilience middleware.
AsyncAPI Code Generation with Corvus: Typed Producers
Generate strongly-typed message producers from AsyncAPI specs using the Corvus CLI - validated payloads, channel address templates, and pluggable transports for NATS, Kafka, AMQP, MQTT, and Azure Service Bus.
OpenAPI Code Generation with Corvus: Testing
Test Corvus-generated OpenAPI code at every level - unit test handler logic in isolation with typed params, integration test the full round-trip with WebApplicationFactory, and verify client behaviour with in-memory transports.
OpenAPI Code Generation with Corvus: Filtering
Generate code for only the endpoints you need - use path filtering and the openapi-show preview command to carve focused, domain-specific clients and server stubs from large OpenAPI specifications.
OpenAPI Code Generation with Corvus: Callbacks, Webhooks and Links
Generate typed webhook receivers and senders from OpenAPI specs with Corvus - callback server stubs for receiving notifications, callback clients for sending them, runtime expression resolution, and linked operations for hypermedia-style API navigation.
Rx.NET v7.0 Now Available
Rx.NET 7.0 is now available, with the potential to reduce deployable application size by up to 90MB.
OpenAPI Code Generation with Corvus: Authentication
Corvus generates per-operation OAuth2 scope constants from your OpenAPI spec - use them with standard .NET DelegatingHandler middleware and Azure.Identity for type-safe authentication without proprietary frameworks.
OpenAPI Code Generation with Corvus: Streaming
Generate typed streaming responses from OpenAPI specs with Corvus - SSE and NDJSON on the server with writer callbacks, IAsyncEnumerable on the client with pooled typed documents and automatic frame parsing.