# test.coordination/core/readers/board.reader.test.ts

> 24 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-coordination-core-readers-board-reader-test-ts
Source text: https://banes-lab.com/source/testing/test.coordination/core/readers/board.reader.test.ts.txt

Listed in [test.coordination/core/readers](https://banes-lab.com/api/source/testing/test.coordination/core/readers.md), after [test.coordination/core/readers/architecture.reader.test.ts](https://banes-lab.com/source/testing/test.coordination/core/readers/architecture.reader.test.ts.md) and before [test.coordination/core/readers/document.reader.test.ts](https://banes-lab.com/source/testing/test.coordination/core/readers/document.reader.test.ts.md).

## Contained in

- [test.coordination/core/readers](https://banes-lab.com/anatomy/testing/folder-testing-test-coordination-core-readers.md)

## Source

```typescript
import { describe, it } from "vitest";
import assert from "node:assert/strict";
import { readBoardContract } from "coordination-surface/tools/core/readers/board.reader.ts";

describe("readBoardContract", () => {
    it("reads the placeholder fields under the first agent and gate anchors, stopping at the first other line", () => {
        const template = [
            "Agent <letter> — <STATE>",
            "  Owns: <paths>",
            "  Flags: —",
            "  Note: filled in",
            "  Refs: <refs>",
            "",
            "Gate <id> — <state>",
            "  State: <v>",
            "",
            "Agent <second> — <STATE>",
            "  Extra: <v>",
        ].join("\n");
        assert.deepEqual(readBoardContract(template), { agentFields: ["Owns", "Flags"], gateFields: ["State"] });
    });

    it("reads nothing from a template that declares no record", () => {
        assert.deepEqual(readBoardContract("prose"), { agentFields: [], gateFields: [] });
    });
});
```
