<!-- Markdown rendering of https://salesascode.com/docs/library/board-narrative. The HTML page is canonical. -->

# Board-Narrative Contract · Docs · Sales as Code

[← All feature docs](https://salesascode.com/docs/library)

Feature docs · /board-narrative

# Board-Narrative Contract

The deterministic what-changed-and-why contract the board-narrative drafter must fill, so the story can never hand-wave a material move.

Included with [crocronjob](https://salesascode.com/docs/library/crocronjob) . A seat without it sees an upsell here instead of the page.

[Open Board-Narrative Contract →](https://salesascode.com/board-narrative) [All docs](https://salesascode.com/docs/library)

## Overview

[Board-Narrative Contract](https://salesascode.com/board-narrative) is the structured layer under the board narrative. Before a word of prose is written, it computes what actually changed period over period and which moves are large enough that the board will ask about them. The narrative drafter, an opus skill, then writes the story, but it must address every item this contract flags, so the explanation is always grounded in the numbers rather than a comfortable summary.

**What it is for, on the page.** Under the headline, this page says what it produces, what makes it run, and where the output lands. Every Work page reads that line from one registry, so the three answers cannot drift from the page.

## What the page fills in for you

The current column arrives filled from your own book where your book can answer it: total ARR across your accounts, open pipeline, your win rate, NRR, and the expansion and churn from renewals that have actually resolved. Each is that surface's own number or a sum over it, and the line under the form names exactly which ones were filled. Anything you type wins; the page fills empty boxes only, on load.

**Last period is not filled in, and that is deliberate.** Nothing here records what ARR, pipeline or your win rate were at a period boundary. The only way to produce a prior column would be to subtract the changes the contract exists to explain, which would make it reconcile against itself: a contract that always balances tells a board nothing. So the prior column is yours to type from whatever you closed the last period with.

Two fields in the current column are blank for the same kind of reason. **New ARR** means revenue from logos that were not customers when the period opened, which needs that same boundary. **CAC payback** needs sales and marketing spend, which nothing in the product stores.

## Deltas, direction, and favorability

For each board-grade metric, ARR, new and expansion and churned ARR, pipeline, win rate, NRR, CAC payback, it computes the change, the percent change, and the direction, and marks whether the move is favorable (for churn and CAC payback, down is good). A metric with no prior period reads as new, not as a percent change from zero, so the contract never manufactures a misleading number.

## Material moves and the ARR bridge

Each metric has a materiality threshold; a move at or above it is flagged as must-explain, and those are the items the drafter cannot skip. When new, expansion, and churned ARR are all present, the contract builds the ARR bridge, new plus expansion minus churn, that must reconcile to the ARR change, so the headline number is always decomposed into its drivers.

## Facts only, deterministic

The contract states magnitudes and directions from the numbers; it never fabricates a cause, that is the drafter's job, grounded in these facts. It is deterministic, so the same two periods always produce the same contract, and the board can trust that nothing material was quietly left out.

---

More for agents: [llms.txt](https://salesascode.com/llms.txt), [full reference](https://salesascode.com/llms-full.txt), [OpenAPI](https://salesascode.com/openapi.json), [sitemap](https://salesascode.com/sitemap.xml).
