# What compiles

URL: /products/what-compiles · Id: `page:products/what-compiles`

> Leaseline’s build artifacts, and the eleven things that change when its definition gains one Verb.

A [Startup](/business/nouns/startup)’s definition compiles to every file it serves. Leaseline’s are published here, and one added [Verb](/business/nouns/verb) shows what moves with it.

## The artifacts
A build of leaseline.app serves these files. The copies here are rebuilt from the registry on every build of these docs.

| Artifact | Holds | Size |
| --- | --- | --- |
| [`openapi.json`](/examples/leaseline/openapi.json) | Every route, 167 operations, with request and response schemas | 571 KB |
| [`sdk/index.d.ts`](/examples/leaseline/sdk/index.d.ts) | The types of `$`: one interface per Noun, one method per Verb | 94 KB |
| [`mcp-tools.json`](/examples/leaseline/mcp-tools.json) | The three MCP tools and the `do` program for each Verb | 16 KB |
| [`agents.json`](/examples/leaseline/agents.json) | The card an agent reads first: Interfaces, Offers and Verbs | 4 KB |
| [`app-routes.json`](/examples/leaseline/app-routes.json) | Every App screen: a list and a record per Noun, a form per Verb | 12 KB |
| [`dataset-schema.json`](/examples/leaseline/dataset-schema.json) | The JSON Schema of every record Leaseline holds | 29 KB |

## One line in the definition
Leaseline declares a `Lease` Noun in `nouns/Lease.mdx`. Its founder asks for a way to add months to a Lease without a renewal notice, and the agent adds one line:

```diff
 verbs:
   renew: { months: integer, increase?: number }
   notify: {}
+  extend: { months: integer }
```

## Eleven things change
| What | After the Change |
| --- | --- |
| API route | `POST /leaseline.app/leases/{lease}/extend` |
| OpenAPI path | `/leases/{lease}/extend`, operationId `Lease.extend` |
| SDK method | `$.Lease.extend(input)`, typed by `LeaseExtendInput` |
| CLI command | `npx startup-builder do Lease.extend` |
| MCP program | `do: $.Lease.extend(input)` |
| App form | `/app/leases/{id}/extend`, the button on every Lease screen |
| VerbSheet | `<VerbSheet verb="Lease.extend" />` renders its fields and button |
| Event | `Lease.extended`, with the Lease |
| Watch selector | `Lease.extended` subscribes a webhook |
| Reference row | `Lease.extend` in the parity matrix and each Interface reference |
| Changelog note | Written from the merged Change that adds it |

## The diff
Each tab is the lines the build adds to one artifact. `dataset-schema.json` does not change, because the Verb adds no field.

**openapi.json**

```diff
+ "/leases/{lease}/extend": {
+   "post": {
+     "operationId": "Lease.extend",
+     "description": "Extend adds months to a Lease’s end date without starting a new term.",
+     "x-event": "Lease.extended"
+   }
+ }
```

**sdk/index.d.ts**

```diff
+ export interface LeaseExtendInput {
+   /** The Lease. */
+   lease: SB.Id
+   /** The months to add. */
+   months: number
+ }
+ 
+   /** Extend adds months to a Lease’s end date without starting a new term. https://leaseline.app/docs */
+   extend(input: LeaseExtendInput, options?: SB.CallOptions): SB.Call<Lease>
+   'Lease.extended': { lease: Lease }
```

**mcp-tools.json**

```diff
+ "verb": "Lease.extend",
+ "program": "do: $.Lease.extend(input)"
```

**agents.json**

```diff
+ "Lease.extend",
```

**app-routes.json**

```diff
+ "path": "/app/leases/{id}/extend",
+ "screen": "form",
+ "verb": "Lease.extend"
```