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
This commit is contained in:
parent
fa7551070e
commit
9111f006cc
21 changed files with 24 additions and 14 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "linkedin-studio",
|
||||
"version": "0.5.2",
|
||||
"version": "0.5.3",
|
||||
"description": "LinkedIn Studio — full-spectrum LinkedIn content engine: feed posts, carousels, video scripts, and long-form newsletter editions, with the 2026 relevance-ranking model baked in. v4.0.0 is an audit-remediation release (Voyage Phase 0–3): every user-facing claim is made honest or removed, all 11 previously-orphaned agents are wired (→ 19 agents), a `/linkedin:firsthour` post-publish command is added (→ 27 commands), the algorithm-signal claims are reconciled to one sourced statement (no unpublishable model name or date), short-form de-AI and video quality gates are added, and the structure lint is rebuilt to guard the real layout plus version/count/stat consistency. Breaking: the newly-wired agents register only on reinstall/reload, and this consolidates the v3.0.0 identity break (slug, agent namespace `linkedin-studio:<agent>`, state-file path `~/.claude/linkedin-studio.local.md`). v3.1.0 added the cold adversarial review package (`/linkedin:headless-review` + Step 6.5 + `/linkedin:pivot` + per-artifact personas); the `/linkedin:*` commands are unchanged. v4.1.0 adds a journey layer: two guided front-doors (`/linkedin:create`, `/linkedin:measure`) plus a router re-tiered into five journeys (Start · Create · Engage · Measure · Grow), with the 27 existing commands kept as the execution tier (→ 29 commands; additive, reload registers the two new commands).",
|
||||
"author": {
|
||||
"name": "Kjell Tore Guttormsen"
|
||||
|
|
|
|||
10
CHANGELOG.md
10
CHANGELOG.md
|
|
@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.5.3] - 2026-06-24
|
||||
|
||||
### Changed — registration hygiene: agent fasit fixtures moved out of `agents/`
|
||||
|
||||
**Stops Claude Code from registering 6 spurious agents.** The six long-form-review fasit fixtures lived in `agents/fixtures/*-cases.md`; because Claude Code scans `agents/` recursively, each was registered as a junk `fixtures:*` agent (`fixtures:content-reviewer-cases`, …). They are test fixtures, not capabilities. **Count-neutral** (no real agent/command/reference/skill change; `ls agents/*.md` still 19) — pure namespace hygiene.
|
||||
|
||||
- **Moved** the 6 fasit fixtures `agents/fixtures/*-cases.md` → `tests/fixtures/*-cases.md`, and their 6 lint tests `agents/__tests__/*-fixture.test.mjs` → `tests/*-fixture.test.mjs` (co-located; each test's relative fixture path retargeted `../fixtures/` → `./fixtures/`). `agents/fixtures/` and `agents/__tests__/` are now removed.
|
||||
- **Retargeted** the 5 agent fasit-refs (`content`/`language`/`persona`/`editorial`/`fact-reviewer`) from `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/…` to `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/…`.
|
||||
- **Tests.** Fixture-lint 35/35 at the new path (`node --test 'tests/*.test.mjs'`); render 20/20, hooks 139/139 unaffected; gate `scripts/test-runner.sh` green (counts + version-consistency). Reinstall/reload required for the 6 spurious agents to disappear from the registry.
|
||||
|
||||
## [0.5.2] - 2026-06-23
|
||||
|
||||
### Added — SB-S2: the evolution loop (second-brain arc)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# LinkedIn Studio Plugin (v0.5.2)
|
||||
# LinkedIn Studio Plugin (v0.5.3)
|
||||
|
||||
> **Version re-baseline (2026-05-31) · M0 landed (2026-06-18, v0.5.0).** Previously numbered 1.0.0–4.1.0; those were pre-release iterations. The honest maturity is **v0.5.0** — **the architecture workstream (M0) is complete: user data now lives in a per-user data dir (`${LINKEDIN_STUDIO_DATA:-$HOME/.claude/linkedin-studio}/`) resolved through one seam per runtime, with automatic idempotent migration on session-start** (see `references/data-path-convention.md`). No command has yet passed the hardening quality-gate, command testing is incomplete, and there is no GUI. The remaining path to **v1.0.0** is three workstreams: **hardening** (every command through the quality-gate), **command testing**, and a **GUI**. The development narrative below is preserved as history.
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
*AI-generated: all code produced by Claude Code through dialog-driven development. [Full disclosure →](../../README.md#ai-generated-code-disclosure)*
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
|
|
|||
|
|
@ -283,6 +283,6 @@ Read these for the contract and the pipeline position:
|
|||
lock (Step 8).
|
||||
- `${CLAUDE_PLUGIN_ROOT}/references/longform-quality-rules.md` — the broad quality
|
||||
pass; this agent is the *finer* argument-integrity gate that runs cold after it.
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/content-reviewer-cases.md` — fasit
|
||||
- `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/content-reviewer-cases.md` — fasit
|
||||
fixture: the Del 4 (Security Champions, Maskinrommet, 2026-05-29) worked cases
|
||||
mapping real argument defects to C1–C5 + severities.
|
||||
|
|
|
|||
|
|
@ -276,6 +276,6 @@ Read these for the contract and the pipeline position:
|
|||
the gate that runs *after* this one; the role boundary is craft vs. response.
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fact-checker.md` — the Step 5 sweep (truth);
|
||||
this agent runs *after* it on the fact-checked draft.
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/editorial-reviewer-cases.md` — fasit
|
||||
- `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/editorial-reviewer-cases.md` — fasit
|
||||
fixture: the Del 4 v5 gold-standard (KTG's eight editorial points mapped to the
|
||||
two axes + severities).
|
||||
|
|
|
|||
|
|
@ -349,6 +349,6 @@ Read these for the package, the boundary, and the pipeline position:
|
|||
for the five-archetype cold adversarial-review package.
|
||||
- `${CLAUDE_PLUGIN_ROOT}/commands/newsletter.md` — Step 6.5 (where this agent runs,
|
||||
cold, on the frozen draft) and Step 8 (lock + pivot-detection).
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/fact-reviewer-cases.md` — fasit fixture:
|
||||
- `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/fact-reviewer-cases.md` — fasit fixture:
|
||||
the six Del 4 (Security Champions) worked cases mapped to F1–F4 + risk sort +
|
||||
the pivot-premise rationale.
|
||||
|
|
|
|||
|
|
@ -314,6 +314,6 @@ Read these for the boundary and the pipeline position:
|
|||
- `${CLAUDE_PLUGIN_ROOT}/references/longform-quality-rules.md` — the broad quality
|
||||
pass; rule 3 (AI-slop ban-list) is `voice-scrubber`'s; your axis is the cold
|
||||
Norwegian-language re-read, not the de-AI ban-list.
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/language-reviewer-cases.md` — fasit
|
||||
- `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/language-reviewer-cases.md` — fasit
|
||||
fixture: the Del 4 / F5 language blind spots (the «Vi» vs «Vi i Nav» quote
|
||||
error, anglicisms, repetitions) mapped to L1–L5 + severities.
|
||||
|
|
|
|||
|
|
@ -394,4 +394,4 @@ the skeleton + pitches (NOT prose — there is none yet) and re-runs this sweep.
|
|||
|
||||
Read these files for the persona contract and pipeline position:
|
||||
- `${CLAUDE_PLUGIN_ROOT}/config/personas.template.md` — the reader persona library, five-field contract, primær rule, two-mode usage
|
||||
- `${CLAUDE_PLUGIN_ROOT}/agents/fixtures/persona-reviewer-cases.md` — fasit fixture: one persona + sample draft + six axes + both modes
|
||||
- `${CLAUDE_PLUGIN_ROOT}/tests/fixtures/persona-reviewer-cases.md` — fasit fixture: one persona + sample draft + six axes + both modes
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// [GATE]/[OPERATØR], never self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/content-reviewer-cases.md', import.meta.url)
|
||||
new URL('./fixtures/content-reviewer-cases.md', import.meta.url)
|
||||
);
|
||||
|
||||
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
|
||||
|
|
@ -12,7 +12,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// never self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/editorial-reviewer-cases.md', import.meta.url)
|
||||
new URL('./fixtures/editorial-reviewer-cases.md', import.meta.url)
|
||||
);
|
||||
|
||||
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
|
||||
|
|
@ -11,7 +11,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/fact-checker-cases.md', import.meta.url)
|
||||
new URL('./fixtures/fact-checker-cases.md', import.meta.url)
|
||||
);
|
||||
const VERDICTS = ['🟢', '🔴', '🟡'];
|
||||
|
||||
|
|
@ -13,7 +13,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// [GATE]/[OPERATØR], never self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/fact-reviewer-cases.md', import.meta.url)
|
||||
new URL('./fixtures/fact-reviewer-cases.md', import.meta.url)
|
||||
);
|
||||
|
||||
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
|
||||
|
|
@ -13,7 +13,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// the fasit directions is [GATE]/[OPERATØR], never self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/language-reviewer-cases.md', import.meta.url)
|
||||
new URL('./fixtures/language-reviewer-cases.md', import.meta.url)
|
||||
);
|
||||
|
||||
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
|
||||
|
|
@ -12,7 +12,7 @@ import { fileURLToPath } from 'node:url';
|
|||
// never self-certified here.
|
||||
|
||||
const FIXTURE_PATH = fileURLToPath(
|
||||
new URL('../fixtures/persona-reviewer-cases.md', import.meta.url)
|
||||
new URL('./fixtures/persona-reviewer-cases.md', import.meta.url)
|
||||
);
|
||||
|
||||
const fixture = readFileSync(FIXTURE_PATH, 'utf8');
|
||||
Loading…
Add table
Add a link
Reference in a new issue