# tools/core/writers/board.writer.ts

> 27 lines of code and 6 definitions.

Tree: Coordination tree
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/coordination#file-coordination-tools-core-writers-board-writer-ts
Source text: https://banes-lab.com/source/coordination/tools/core/writers/board.writer.ts.txt

Listed in [tools/core/writers](https://banes-lab.com/api/source/coordination/tools/core/writers.md), before [tools/core/writers/repair.writer.ts](https://banes-lab.com/source/coordination/tools/core/writers/repair.writer.ts.md).

## Definitions

- `refuse` (lexical_declaration, line 6, exported)
- `landWitnessed` (lexical_declaration, line 19, exported)
- `contended` (lexical_declaration, line 10)
- `changes` (lexical_declaration, line 11)
- `witness` (lexical_declaration, line 24, exported)
- `conflict` (lexical_declaration, line 30, exported)

## Used by

- [tools/core/runners/board.runner.ts](https://banes-lab.com/source/coordination/tools/core/runners/board.runner.ts.md)
- [tools/core/runners/collapse.runner.ts](https://banes-lab.com/source/coordination/tools/core/runners/collapse.runner.ts.md)

## Source

```typescript
import type { CompressOutcome, SpanConflict, Witnessed } from "../types/board.types.ts";
import { readFileSync, writeFileSync } from "node:fs";
import { compareSpans } from "../resolvers/board.resolver.ts";
import { recordContended } from "../strings/board.strings.ts";

export const refuse = function refuse(message: string, code: number): CompressOutcome {
    return { code, excised: [], message, write: null };
};

const contended = function contended(target: string, agent: string, conflict: SpanConflict): CompressOutcome {
    const changes = [
        ...conflict.added.map((line) => `  + ${line.trim().slice(0, 110)}\n`),
        ...conflict.removed.map((line) => `  - ${line.trim().slice(0, 110)}\n`),
    ];

    return { code: 1, excised: [], message: recordContended(target, agent, changes), write: null };
};

export const landWitnessed = function landWitnessed(
    witnessed: Witnessed,
    landed: CompressOutcome,
    retry: () => CompressOutcome,
): CompressOutcome {
    const witness = readFileSync(witnessed.absolute, "utf8");
    if (witness === witnessed.before) {
        writeFileSync(witnessed.absolute, witnessed.written, "utf8");
        return landed;
    }

    const conflict = compareSpans(witnessed.before, witness, witnessed.agent);
    return conflict.overlapping ? contended(witnessed.target, witnessed.agent, conflict) : retry();
};
```
