linkedin-studio/tests/editorial-reviewer-fixture.test.mjs
Kjell Tore Guttormsen 9111f006cc refactor(linkedin-studio): move agent fasit fixtures + tests out of agents/ (v0.5.3)
The 6 long-form-review fasit fixtures (agents/fixtures/*-cases.md) were registered
by Claude Code as junk `fixtures:*` agents because agents/ is scanned recursively.
They are test fixtures, not capabilities. Moved them + their 6 lint tests to
tests/ + tests/fixtures/ and retargeted the 5 agent fasit-refs. Count-neutral
namespace hygiene (ls agents/*.md still 19).

- agents/fixtures/*-cases.md            -> tests/fixtures/        (6)
- agents/__tests__/*-fixture.test.mjs   -> tests/                 (6; ../fixtures -> ./fixtures)
- 5 agent refs ${CLAUDE_PLUGIN_ROOT}/agents/fixtures -> /tests/fixtures
- version-sync 0.5.2 -> 0.5.3 (plugin.json / README badge / CLAUDE.md / CHANGELOG)

Verify: fixture-lint 35/35 at new path; render 20/20, hooks 139/139; test-runner 109/0/0.
Reinstall/reload required for the 6 spurious agents to leave the registry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CrTb8ktf1XZWEVwgz5MTTo
2026-06-24 13:29:57 +02:00

87 lines
2.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, test } from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
// Lint-test for the editorial-reviewer fasit fixture.
// Mirrors the structure-only discipline of persona-reviewer-fixture.test.mjs and
// fact-checker-fixture.test.mjs: this test asserts the SHAPE of the fixture —
// the two judging axes, all ten checks (P1P5 + A1A5), the three severities,
// and the eight Del 4 cases that form the gold standard. Whether the agent's
// live flags actually reproduce the fasit directions is [GATE]/[OPERATØR],
// never self-certified here.
const FIXTURE_PATH = fileURLToPath(
new URL('./fixtures/editorial-reviewer-cases.md', import.meta.url)
);
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
// The ten checks: five prose-craft (P1P5) + five narrative-architecture (A1A5).
const PROSE_CHECKS = ['P1', 'P2', 'P3', 'P4', 'P5'];
const ARCH_CHECKS = ['A1', 'A2', 'A3', 'A4', 'A5'];
// The two axis names (Norwegian, as the agent and the writing contract use them).
const AXES = ['prosa-håndverk', 'narrativ-arkitektur'];
// The three-rung severity scale.
const SEVERITIES = ['BLOCK', 'REWORK', 'NICE'];
describe('editorial-reviewer fixture structure', () => {
test('names both judging axes', () => {
for (const axis of AXES) {
assert.ok(
new RegExp(axis, 'i').test(fixture),
`fixture must name the axis "${axis}"`
);
}
});
test('documents all ten checks (P1P5 + A1A5)', () => {
for (const check of [...PROSE_CHECKS, ...ARCH_CHECKS]) {
assert.ok(
fixture.includes(check),
`fixture must reference the check "${check}"`
);
}
});
test('defines the three-rung severity scale', () => {
for (const sev of SEVERITIES) {
assert.ok(
fixture.includes(sev),
`fixture must define the severity "${sev}"`
);
}
});
test('documents the eight Del 4 cases', () => {
const cases = fixture.match(/^###\s+Case\s+\d+\b/gim) || [];
assert.equal(
cases.length,
8,
`fixture must document exactly 8 Del 4 cases (found ${cases.length})`
);
});
test('ties the checklist to the Maskinrommet §C2 truth source', () => {
assert.ok(
/§C2|C2/.test(fixture),
'fixture must reference the §C2 writing-contract truth source'
);
});
test('keeps the jury-judges-writer-writes boundary (direction, not copy)', () => {
assert.ok(
/direction, not rewritten copy/i.test(fixture),
'fixture must state the direction-not-copy boundary'
);
});
test('records the persona-blindspot rationale (≈6/8 editorial-only)', () => {
assert.ok(
/blindsone/i.test(fixture) && /6\/8/.test(fixture),
'fixture must record why the gate exists (blind spots, ~6/8 editorial-only)'
);
});
});