feat(journalist): primary agent + 8 skills + 3 editorial policies #7

Merged
MillasAgent merged 2 commits from feat/journalist-agent into main 2026-09-04 10:49:23 +00:00
Owner

Resumen

Segundo agente primario del bundle (mode: primary), alcanzable vía Tab en la TUI de opencode (no en el task: allowlist del orchestrator — deliberado, para preservar los gates de aprobación del usuario).

Qué añade

  • workspace/opencode/agents/journalist.md — agente con system prompt en inglés, outputs en español de España (vosotros, tú, leísmo permitido, vocabulario peninsular). 15 keys de permission; task: deny (leaf); webfetch: allow, websearch: allow, bash: ask, edit: ask.
  • 8 skills en workspace/opencode/skills/<name>/SKILL.md: research, fact-check, editorial-review, seo-wordpress, wordpress-publish, youtube-script, fliki, youtube-packaging. Cada una con name == folder, kebab-case regex, compatibility: opencode, metadata.audience: journalist.
  • 3 políticas editoriales en workspace/opencode/editorial/: style-guide.md, source-policy.md, publication-policy.md. Plain Markdown (sin frontmatter). No se despliegan automáticamente — tech debt TD-25; el usuario copia manualmente tras primer install.

Patrón arquitectónico: dossier-as-contract

research produce projects/<n>-<slug>/research.md (Markdown legible + tabla de claims al final). Cada claim tiene [C-NNN], tier T1–T4, URL, fecha de acceso, confianza. Las 8 skills consumen ese dossier — ninguna re-investiga. Si una skill no puede citar un claim ID, marca [NO VERIFICADO] y se detiene.

Pipeline

research → fact-check → youtube-script → iterate (editorial-review --annotate)
       → seo-wordpress + youtube-packaging → wordpress-publish (two-stage)

Jerarquía editorial bloqueada en publication-policy.md §Jerarquía: Veracidad > Evidencia > Política editorial > Claridad > Calidad periodística > Experiencia del lector > SEO > CTR. Reforzada en cada skill.

wordpress-publish exige frase literal ("publish now" / "publicar ahora") para stage 2 — no acepta "sí", "vale", "ok".

Visuales

Sesgo por defecto a [STOCK] (Fliki stock library); [VISUAL] (Fliki AI gen) solo con justificación inline. Mantiene los 180 créditos/mes viables para ~20 vídeos/mes.

Para usar

  1. Merge este PR.
  2. Primer despliegue:
    cp -a workspace/opencode/editorial ~/.config/opencode/
    
  3. TUI → Tab → seleccionar journalist.
  4. Configurar WordPress MCP en ~/.config/opencode/opencode.jsonc cuando se quiera publicar.

Validación

  • bash workspace/opencode/deploy.sh --check — verde (1 agente + 8 skills pasan frontmatter)
  • bash workspace/opencode/tests/test_install.sh — 26/26 pass
  • security-auditor: GREEN (1 LOW → corregido: external_directory ordering)
  • arch-quality-reviewer: AMBER → corregido (2 majors: layout de tests en AGENTS.md §3, agent→policy cross-refs)

Diff stats

AGENTS.md                                |  18 +++-
CHANGELOG.md                             |  10 ++
README.md                                |  34 +++++-
workspace/opencode/install.sh            |   8 +-
workspace/opencode/openmillas            |   8 +-
workspace/opencode/tests/test_install.sh | 180 +++++++++++++++++++++++++++++-
+ 12 new files (journalist.md, editorial/, 8 skills)

Pendientes (no bloquean)

  • TD-25: auto-deploy de editorial/ vía deploy.sh copy_bundle (documentado en AGENTS.md §7).
  • Quotes mixtos en description: de skills (cosmético).
  • Skill editorial-review describe "modos --report/--annotate" como CLI flags (cosmético; semántica real por invocación).

Tech debt previo preservado

  • task: deny en reviewers existente (verificado por do_test_reviewers_task_deny_preserved).
  • Sin model: en ningún agente (regla post-0.1.1; verificado por do_test_journalist_no_model_field).
  • Sin cambios en deploy.sh copy_bundle para editorial/ (acordado posponer).
## Resumen Segundo agente primario del bundle (`mode: primary`), alcanzable vía **Tab en la TUI de opencode** (no en el `task:` allowlist del orchestrator — deliberado, para preservar los gates de aprobación del usuario). ### Qué añade - **`workspace/opencode/agents/journalist.md`** — agente con system prompt en inglés, outputs en español de España (vosotros, tú, leísmo permitido, vocabulario peninsular). 15 keys de permission; `task: deny` (leaf); `webfetch: allow`, `websearch: allow`, `bash: ask`, `edit: ask`. - **8 skills** en `workspace/opencode/skills/<name>/SKILL.md`: `research`, `fact-check`, `editorial-review`, `seo-wordpress`, `wordpress-publish`, `youtube-script`, `fliki`, `youtube-packaging`. Cada una con `name == folder`, kebab-case regex, `compatibility: opencode`, `metadata.audience: journalist`. - **3 políticas editoriales** en `workspace/opencode/editorial/`: `style-guide.md`, `source-policy.md`, `publication-policy.md`. Plain Markdown (sin frontmatter). **No se despliegan automáticamente** — tech debt TD-25; el usuario copia manualmente tras primer install. ### Patrón arquitectónico: dossier-as-contract `research` produce `projects/<n>-<slug>/research.md` (Markdown legible + tabla de claims al final). Cada claim tiene `[C-NNN]`, tier T1–T4, URL, fecha de acceso, confianza. Las 8 skills consumen ese dossier — **ninguna re-investiga**. Si una skill no puede citar un `claim ID`, marca `[NO VERIFICADO]` y se detiene. ### Pipeline ``` research → fact-check → youtube-script → iterate (editorial-review --annotate) → seo-wordpress + youtube-packaging → wordpress-publish (two-stage) ``` Jerarquía editorial bloqueada en `publication-policy.md` §Jerarquía: Veracidad > Evidencia > Política editorial > Claridad > Calidad periodística > Experiencia del lector > SEO > CTR. Reforzada en cada skill. `wordpress-publish` exige frase literal ("publish now" / "publicar ahora") para stage 2 — no acepta "sí", "vale", "ok". ### Visuales Sesgo por defecto a `[STOCK]` (Fliki stock library); `[VISUAL]` (Fliki AI gen) solo con justificación inline. Mantiene los 180 créditos/mes viables para ~20 vídeos/mes. ### Para usar 1. Merge este PR. 2. Primer despliegue: ```bash cp -a workspace/opencode/editorial ~/.config/opencode/ ``` 3. TUI → Tab → seleccionar `journalist`. 4. Configurar WordPress MCP en `~/.config/opencode/opencode.jsonc` cuando se quiera publicar. ### Validación - ✅ `bash workspace/opencode/deploy.sh --check` — verde (1 agente + 8 skills pasan frontmatter) - ✅ `bash workspace/opencode/tests/test_install.sh` — 26/26 pass - ✅ security-auditor: GREEN (1 LOW → corregido: `external_directory` ordering) - ✅ arch-quality-reviewer: AMBER → corregido (2 majors: layout de tests en `AGENTS.md §3`, agent→policy cross-refs) ### Diff stats ``` AGENTS.md | 18 +++- CHANGELOG.md | 10 ++ README.md | 34 +++++- workspace/opencode/install.sh | 8 +- workspace/opencode/openmillas | 8 +- workspace/opencode/tests/test_install.sh | 180 +++++++++++++++++++++++++++++- + 12 new files (journalist.md, editorial/, 8 skills) ``` ### Pendientes (no bloquean) - **TD-25**: auto-deploy de `editorial/` vía `deploy.sh copy_bundle` (documentado en `AGENTS.md §7`). - Quotes mixtos en `description:` de skills (cosmético). - Skill `editorial-review` describe "modos `--report/--annotate`" como CLI flags (cosmético; semántica real por invocación). ### Tech debt previo preservado - `task: deny` en reviewers existente (verificado por `do_test_reviewers_task_deny_preserved`). - Sin `model:` en ningún agente (regla post-0.1.1; verificado por `do_test_journalist_no_model_field`). - Sin cambios en `deploy.sh copy_bundle` para `editorial/` (acordado posponer).
Adds a second primary agent (mode: primary) for the millaredos.com
history-of-technology YouTube channel and blog. Reachable only via
TUI Tab selection; not in the orchestrator's task: allowlist.

Eight skills share a single dossier (projects/<n>-<slug>/research.md)
as their universal input — hexagonal ports-and-adapters pattern,
no skill re-investigates.

Three editorial policy docs at workspace/opencode/editorial/
(style-guide, source-policy, publication-policy) are NOT auto-deployed
by deploy.sh — tech debt TD-25; the user copies them manually once.

Workflow gates (publication-policy.md):
- research → fact-check → youtube-script → iterate with
  editorial-review --annotate → seo-wordpress + youtube-packaging
  → optional wordpress-publish (two-stage approval).
- The locked priority hierarchy (Veracidad > Evidencia > Política
  editorial > Claridad > Calidad periodística > Experiencia del
  lector > SEO > CTR) is enforced at every layer.
- Spanish from Spain (vosotros, tú, leísmo allowed, peninsular
  vocabulary) for content output; English for the agent prompt
  and skill bodies per AGENTS.md §5.6.

7 new tests appended to test_install.sh (agent presence, 8 skill
presence, frontmatter completeness, no-model-field, reviewer
task-deny preserved, external_directory ordering).

deploy.sh hardcoded counts bumped 7→8 agents, 5→13 skills in both
install.sh and openmillas doctor checks.
Adds a two-level index lookup for workspace continuity:
  1. proyectos/_index.md (preferred, millaredos blog workflow)
  2. projects/_index.md  (generic fallback)

Graceful fallback preserved: if neither is present, proceed and
notify the user once in the first turn (do NOT block).
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MillasDev/memory!7
No description provided.