tools/core/runners/task.runner.ts

tools/core/runners/task.runner.ts is a file in Coordination Surface. 81 lines of code and 20 definitions.

import {
    ROW_INCOMPLETE,
    contractMissing,
    idTaken,
    noTaskRows,
    planMissing,
    rowAppended,
} from "../strings/task.strings.ts";
import { existsSync, readFileSync } from "node:fs";

import { PLANNING_TEMPLATE } from "../constants/checklist.constants.ts";
import { readRowMarkers } from "../readers/template.reader.ts";
import { resolve } from "node:path";
import { writeRepair } from "../writers/repair.writer.ts";

const TASK_MARKER = "- [ ] ";

const PLACEHOLDER = "<unwritten>";

const OWNER_MARKER = "*owner:*";

const FIELD_DIVIDER = " · ";

interface TaskRequest {
    readonly repoRoot: string;
    readonly target: string;
    readonly id: string;
    readonly statement: string;
    readonly owner: string;
}

interface TaskOutcome {
    readonly code: number;
    readonly message: string;
}

const isDeclared = function isDeclared(source: string, id: string): boolean {
    for (const line of source.split("\n")) {
        if (!line.trimStart().startsWith(TASK_MARKER)) {
            continue;
        }
        if (line.trimStart().slice(TASK_MARKER.length).startsWith(`${id} `)) {
            return true;
        }
    }

    return false;
};

const lastTaskLine = function lastTaskLine(lines: readonly string[]): number {
    let at = -1;

    for (let index = 0; index < lines.length; index += 1) {
        if ((lines[index] ?? "").trimStart().startsWith(TASK_MARKER)) {
            at = index;
        }
    }

    return at;
};

export const runTask = function runTask(request: TaskRequest): TaskOutcome {
    const absolute = resolve(request.repoRoot, request.target);

    if (!existsSync(absolute)) {
        return { code: 2, message: planMissing(request.target) };
    }

    if (request.id.trim().length === 0 || request.statement.trim().length === 0) {
        return { code: 2, message: ROW_INCOMPLETE };
    }

    const source = readFileSync(absolute, "utf8");

    if (isDeclared(source, request.id.trim())) {
        return { code: 2, message: idTaken(request.id, request.target) };
    }

    const lines = source.split("\n");
    const at = lastTaskLine(lines);
    if (at === -1) {
        return { code: 2, message: noTaskRows(request.target) };
    }

    const template = resolve(request.repoRoot, PLANNING_TEMPLATE);
    const markers = existsSync(template) ? readRowMarkers(readFileSync(template, "utf8")) : [];
    if (markers.length === 0) {
        return { code: 2, message: contractMissing(PLANNING_TEMPLATE) };
    }

    const fields = markers
        .map((marker) => `${marker} ${marker === OWNER_MARKER ? request.owner : PLACEHOLDER}`)
        .join(FIELD_DIVIDER);

    const row = `${TASK_MARKER}${request.id.trim()} ${request.statement.trim()}. ${fields}`;
    const written = [...lines.slice(0, at + 1), row, ...lines.slice(at + 1)];

    const outcome = writeRepair({ declared: "whole", repoRoot: request.repoRoot }, request.target, written.join("\n"));
    if (!outcome.written) {
        return { code: 2, message: outcome.refusal ?? "" };
    }

    return { code: 0, message: rowAppended(request.id, request.target) };
};