@mcptoolshop/claude-synergy 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,37 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.2] - 2026-05-25
9
+
10
+ Docs-only patch. No code, schema, or behavior change. The `dist/` tarball is byte-identical to 1.2.1.
11
+
12
+ ### Changed
13
+ - **README.md** — added Tier 7 row for v1.3 `cs-actions:v1` fine-tuned synthesizer (release-gate eval numbers + anti-`unknown` bias as documented v1 limitation + pointer to handbook + dataset/README.md + TRAINING.md + EVAL.md).
14
+ - **README.md** — new top-level "Datasets and fine-tuned models" section covering `dataset/changelog-actions/v1` (301 entries, 8-enum taxonomy, A3c review) and `cs-actions:v1` (Qwen2.5-7B + LoRA, Ollama-deployed, eval table, anti-`unknown` bias, "not distributed through this repo" note).
15
+ - **README.{ja,zh,es,fr,hi,it,pt-BR}.md** — all 7 translations refreshed via TranslateGemma 12B (local, zero API cost).
16
+
17
+ ### Out of npm shape
18
+ - New handbook page `site/src/content/docs/handbook/cs-actions-v1.md` ships in the repo + on the [landing page](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) but is not in the npm tarball (`site/` is outside `files[]`).
19
+ - Dataset directory `dataset/changelog-actions/v1/` is in the repo + on the [`cs-actions-v1` GitHub Release](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) (eval-report.v1.json as single-file asset) but is not in the npm tarball.
20
+
21
+ ## [1.2.1] - 2026-05-24
22
+
23
+ ### Fixed
24
+ - **Fetcher-marker centralization** — `writeMarker` is now called from `fetchOne` on every successful fetch, not from inside each strategy. Strategies that returned 0 in-window dated items (most notably `aider` raw-changelog) never wrote a marker pre-fix and re-pulled the full source on every sync. Regression §8.21 protects against the re-pull behavior.
25
+
26
+ ### Changed
27
+ - **`webfetch` strategy renamed to `manual`** for `claude-api` + `anthropic-apps` to reflect reality — nothing in `fetch.ts` dispatches the strategy, so seeding is currently manual. `sync_status` now renders manual products as `manual` instead of `never` and excludes them from `--stale-only`.
28
+
29
+ ## [1.2.0] - 2026-05-24
30
+
31
+ ### Added
32
+ - **`sync_status` MCP tool** — per-product sync freshness. Inputs: `product?`, `stale_only?`, `stale_hours?`. Returns last fetch timestamp, hours since fetch, ingested release count. Use BEFORE trusting `latest_releases` to know if the corpus is stale.
33
+ - **`sync_now` MCP tool** — on-demand refresh (mirrors `hk sync`). Inputs: `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. Rejects with `InvalidParams` if another `sync_now` is already in flight (in-process concurrency lock). Does NOT commit to git.
34
+ - MCP tool count 11 → 13.
35
+
36
+ ### Fixed
37
+ - **Marker-wipe bug (regression §8.20)** — `INSERT OR REPLACE INTO products` was cascading a `DELETE` to the `markers` FK on every `hk ingest`, silently resetting every product's `since` cursor. Replaced with `INSERT … ON CONFLICT(slug) DO UPDATE` to upsert in place without triggering the cascade.
38
+
8
39
  ## [1.1.1] - 2026-05-22
9
40
 
10
41
  ### Removed
package/README.es.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Datos actualizados (a partir de la versión 1.2.0):** 44 productos / 1.171 archivos de lanzamiento / 6.573 cambios / 1.260 entidades / 12 sinergias / 517 pruebas / 13 herramientas MCP / 17 comandos de línea de comandos. (La base de datos se actualizó mediante `sync_now` el 24 de mayo de 2026).
76
+ **Cifras actualizadas (a partir de la versión 1.2.1):** 44 productos / 1.171 archivos de lanzamiento / 6.573 cambios / 1.260 entidades / 12 sinergias / 519 pruebas / 13 herramientas MCP / 17 comandos de línea de comandos. (El corpus se actualizó mediante `sync_now` el 24 de mayo de 2026).
77
77
 
78
78
  ---
79
79
 
@@ -91,6 +91,8 @@ claude-synergy/
91
91
  | **4d — Playwright + registro de MCP + configuración YAML** | ✅ implementado | Windsurf a través de Playwright; Smithery + registro oficial de MCP como catálogos de la etapa 4; productos consolidados en `products.yaml`. |
92
92
  | **5 — Navegación con ventanas en la versión 1.1 + integración de OpenAI** | ✅ implementado | `hk diff` / `hk breaking`, límites de fecha para todos los comandos de navegación, 3 nuevas herramientas MCP (un total de 11), proveedor de incrustación de OpenAI, dimensión de incrustación configurable, sincronización automática de `claude-code`, analizador genérico `keep-a-changelog`. |
93
93
  | **6 — Sincronización desde MCP en la versión 1.2** | ✅ implementado | `sync_status` (frescura por producto, detección de "obsoleto") y `sync_now` (obtención bajo demanda → ingestión → incrustación con vista previa de `dry_run` + bloqueo de concurrencia en el proceso). Elimina la brecha donde un agente podía consultar la base de datos pero no actualizarla. **También corrige:** el error de "limpieza de marcadores" donde `INSERT OR REPLACE INTO products` desencadenaba un DELETE en la clave externa `markers`, restableciendo silenciosamente el cursor `since` de cada producto en cada ingestión (regresión §8.20). |
94
+ | **6.1 — v1.2.1: Centralización del marcador de extracción** | ✅ implementado | Se centralizó `writeMarker` en `fetchOne` para que cada extracción exitosa actualice el marcador. Las estrategias que devolvían 0 elementos con fecha dentro del período especificado (especialmente el registro de cambios "raw" de `aider`) nunca escribían un marcador y volvían a descargar `HISTORY.md` en cada sincronización. Se renombró la estrategia `webfetch` no implementada a `manual` para `claude-api` + `anthropic-apps`; ahora, `sync_status` muestra los productos manuales como "manual" en lugar de "nunca" y los excluye de `stale_only` (regresión §8.21). |
95
+ | **7 — v1.3: Sintetizador ajustado "cs-actions:v1"** | ✅ implementado | Primer modelo derivado entrenado en el corpus. Convierte una entrada de registro de cambios en un elemento de acción estricto en formato JSON: `{kind, severity, subject, action_text, deadline, tags}`. Qwen2.5-7B + LoRA en 242 entradas de `dataset/changelog-actions/v1/`, formato GGUF q8_0, implementado con Ollama. Evaluación de la versión: **88.1% de precisión en "kind" / 79.7% de precisión en "severity" / 0.842 macro-F1** frente a la verdad fundamental en un conjunto de 59 entradas estratificadas (+10.1 puntos porcentuales / +27.2 puntos porcentuales / +0.041 sobre la base qwen3:8b). Se etiquetó como `cs-actions-v1`; el informe de evaluación está adjunto a la [versión de GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) como una descarga de un solo archivo. **Limitación de la versión 1 documentada:** sesgo anti-"desconocido" (precisión 1.000 / recuperación 0.286) — el modelo subestima la clasificación de entradas ambiguas. Consulte el [manual → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md). |
94
96
 
95
97
  Hoja de ruta para la versión 0.8+: se encuentra en [URGENT_FINDINGS.md](URGENT_FINDINGS.md) y en los problemas.
96
98
 
@@ -289,12 +291,43 @@ Estrategias de recuperación: `gh-releases | rss | raw-changelog | html-scrape |
289
291
 
290
292
  ---
291
293
 
294
+ ## Conjuntos de datos y modelos ajustados
295
+
296
+ El corpus tiene una capa de modelos derivados: **conjuntos de datos** curados derivados de los puntos de los registros de cambios, y **modelos ajustados** entrenados en esos conjuntos de datos. El conjunto de datos es el artefacto en este repositorio; el modelo es el derivado.
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 entradas
299
+
300
+ Cada entrada combina un punto de cambio del corpus con un elemento de acción escrito a mano: `{kind, severity, subject, action_text, deadline, tags}`. Taxonomía de 8 elementos para `kind` (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), división de entrenamiento/validación estratificada 80/20, revisado por humanos y por un juez qwen3:8b de la familia cruzada (92.4% de acuerdo). Consulte [`dataset/README.md`](dataset/README.md) para la tabla de distribución, [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) para el contrato de campo por campo y [`STYLE.md`](dataset/changelog-actions/STYLE.md) para las reglas de escritura de `action_text`.
301
+
302
+ ### `cs-actions:v1` — sintetizador ajustado
303
+
304
+ Primer modelo entrenado en el conjunto de datos. Qwen2.5-7B-Instruct + LoRA (rango-256 / lineal completo, 100 pasos QLoRA en 242 entradas de entrenamiento), formato GGUF q8_0, implementado mediante un archivo de modelo Ollama de dos etapas (`cs-actions-base` + `cs-actions:v1`).
305
+
306
+ **Evaluación de la versión** (conjunto de validación estratificado de 59 entradas, tres ejecuciones, todas aprobadas, sin errores de análisis):
307
+
308
+ | Métrica | qwen3:8b base | cs-actions:v1 | Diferencia |
309
+ |---|---|---|---|
310
+ | Precisión en "kind" vs. verdad fundamental | 78.0% | **88.1%** | +10.1pp |
311
+ | Precisión en "severity" vs. verdad fundamental | 52.5% | **79.7%** | +27.2pp |
312
+ | Macro-F1 (clases con buena población) | 0.801 | **0.854** | +0.053 |
313
+ | Ejecución 3 — ablación de la sugerencia de "kind" (con sugerencia / sin sugerencia) | — | 0.842 / 0.777 | 6.5pt → zona objetivo |
314
+
315
+ Criterio de aprobación de la versión `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0.780 ≥ 0.780`) — APROBADO ✓. Veredictos individuales en [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json), también adjunto a la [versión de GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) como una descarga de un solo archivo.
316
+
317
+ **Limitación documentada de la versión 1: sesgo contra "desconocido".** "desconocido" es la única clase en la que cs-actions:v1 tiene un rendimiento inferior a qwen3:8b (F1 de 0.444 frente a 0.545). Precisión 1.000 / recuperación 0.286: cuando la entrada es genuinamente ambigua, el modelo se compromete con un tipo específico en lugar de abstenerse. Hereda el conocimiento previo de la familia qwen, que no se ha anulado completamente con LoRA. Los usuarios finales deben considerar una tasa de "kind: "desconocido"" inferior a la esperada como una señal para redirigir los lotes a una revisión humana. El [plan de la versión 2](dataset/README.md) aborda esto mediante la ampliación de la clase "desconocido" y la aleatorización de pistas.
318
+
319
+ **No se distribuye a través de este repositorio:** el formato GGUF q8_0 tiene aproximadamente 5 GB y el punto de control combinado tiene aproximadamente 15 GB. El conjunto de datos y la canalización de construcción son lo que se publica; el modelo se reconstruye localmente según [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) (cadena manual de 4 etapas, aproximadamente 88 minutos de calentamiento en una computadora portátil RTX 5080 con 16 GB de VRAM). El contrato de lanzamiento de tres ejecuciones se encuentra en [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md).
320
+
321
+ Una guía completa de uso, que incluye la invocación local de Ollama, el requisito de "format: "json"" para cada solicitud y la canalización de reconstrucción, se encuentra en la página del [manual → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/).
322
+
323
+ ---
324
+
292
325
  ## Pruebas
293
326
 
294
327
  El conjunto de pruebas Vitest cubre los niveles de unidad / integración / regresión / pruebas básicas. **[test-spec-3.md](test-spec-3.md) es la autoridad actual** a partir de la versión v0.7.0; [test-spec.md](test-spec.md) (v1) y [test-spec-2.md](test-spec-2.md) (v2) permanecen en el repositorio como registro histórico de la línea de diseño.
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
package/README.fr.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Chiffres en direct (version 1.2.0) :** 44 produits / 1 171 fichiers de publication / 6 573 modifications / 1 260 entités / 12 synergies / 517 tests / 13 outils MCP / 17 commandes CLI. (Le corpus a été mis à jour via `sync_now` le 24 mai 2026.)
76
+ **Chiffres en direct (version v1.2.1) :** 44 produits / 1 171 fichiers de publication / 6 573 modifications / 1 260 entités / 12 synergies / 519 tests / 13 outils MCP / 17 commandes CLI. (La base de données a été actualisée via `sync_now` le 24 mai 2026.)
77
77
 
78
78
  ---
79
79
 
@@ -90,7 +90,9 @@ claude-synergy/
90
90
  | **4c — ingestion HTML→Markdown avec turndown** | ✅ réalisé | Les corps HTML (Copilot/VS Code/Cursor) génèrent désormais des lignes individuelles pour FTS5 + l'extraction d'entités. |
91
91
  | **4d — Playwright + registre MCP + configuration YAML** | ✅ réalisé | Windsurf via Playwright ; Smithery + registre MCP officiel comme catalogues de l'étape 4 ; les produits sont regroupés dans `products.yaml`. |
92
92
  | **5 — Navigation avec fenêtrage v1.1 + intégration OpenAI** | ✅ réalisé | `hk diff` / `hk breaking`, limites de date pour toutes les commandes de navigation, 3 nouveaux outils MCP (total de 11), fournisseur d'intégration OpenAI, dimension d'intégration configurable, synchronisation automatique de `claude-code`, analyseur générique `keep-a-changelog`. |
93
- | **6 — v1.2 synchronisation à partir de MCP** | ✅ réalisé | `sync_status` (fraîcheur par produit, détection de données obsolètes) et `sync_now` (récupération à la demande → ingestion → intégration avec aperçu `dry_run` + verrouillage de concurrence en cours). Comble le fossé où un agent pouvait interroger le corpus mais pas le mettre à jour. **Corrige également :** un bug lié à la suppression des marqueurs où `INSERT OR REPLACE INTO products` déclenchait une suppression en cascade sur la clé étrangère `markers`, remettant silencieusement à zéro le curseur `since` de chaque produit à chaque ingestion (régression §8.20). |
93
+ | **6 — v1.2 synchronisation à partir de MCP** | ✅ réalisé | `sync_status` (état de fraîcheur par produit, détection "jamais/obsolète") et `sync_now` (récupération à la demande → ingestion → intégration avec aperçu `dry_run` + verrouillage de concurrence en cours). Comble le fossé où un agent pouvait interroger la base de données, mais pas la mettre à jour. **Corrige également :** un bug de suppression de marqueur où `INSERT OR REPLACE INTO products` déclenchait une suppression sur la clé étrangère `markers`, remettant silencieusement à zéro le curseur `since` de chaque produit à chaque ingestion (régression §8.20). |
94
+ | **6.1 — v1.2.1 centralisation des marqueurs de récupération** | ✅ réalisé | La fonction `writeMarker` a été centralisée dans `fetchOne` afin que chaque récupération réussie mette à jour le marqueur. Les stratégies qui renvoyaient 0 éléments datés dans la plage spécifiée (notamment `aider` pour le journal des modifications brut) n'écrivaient pas de marqueur et ré-téléchargeaient `HISTORY.md` à chaque synchronisation. La stratégie `webfetch` non implémentée a été renommée en `manual` pour `claude-api` et `anthropic-apps` ; `sync_status` affiche désormais les produits "manuels" comme "manual" au lieu de "jamais" et les exclut de `stale_only` (régression §8.21). |
95
+ | **7 — v1.3 cs-actions:v1, synthétiseur affiné** | ✅ réalisé | Premier modèle descendant entraîné sur le corpus. Convertit une entrée de journal des modifications en une action structurée au format JSON : `{kind, severity, subject, action_text, deadline, tags}`. Qwen2.5-7B + LoRA sur 242 entrées provenant de `dataset/changelog-actions/v1/`, format GGUF q8_0, déployé via Ollama. Évaluation pour la validation de la version : **88,1 % pour la catégorie / 79,7 % pour la gravité / 0,842 pour le macro-F1** par rapport aux données réelles sur un ensemble de 59 entrées stratifiées (+10,1 points de pourcentage / +27,2 points de pourcentage / +0,041 par rapport au modèle de base qwen3:8b). Étiqueté `cs-actions-v1`; le rapport d'évaluation est joint à la [publication GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) en tant que fichier unique. **Limitation documentée de la version 1 :** biais anti-`inconnu` (précision de 1,000 / rappel de 0,286) — le modèle attribue incorrectement des catégories à des entrées ambiguës. Consultez le [guide → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md). |
94
96
 
95
97
  Feuille de route pour la version 0.8+ : consultable dans [URGENT_FINDINGS.md](URGENT_FINDINGS.md) et les problèmes.
96
98
 
@@ -254,10 +256,10 @@ Outils exposés :
254
256
  | `get_changes_since` | **Nouveau.** Modifications dans une fenêtre de temps, regroupées par produit + version. Entrées : `since` (obligatoire), `until?`, `product?`, `kind?`, `limit?`. |
255
257
  | `search_breaking_changes` | **Nouveau.** Liste plate des modifications importantes — aucun terme de recherche n'est nécessaire. Entrées : `product?`, `since?`, `until?`, `limit?`. |
256
258
  | `compare_versions` | **Nouveau.** Toutes les modifications entre deux versions d'un même produit. Entrées : `product`, `from_version`, `to_version`. |
257
- | `sync_status` | **v1.2.** Fraîcheur de la synchronisation par produit : horodatage de la dernière récupération, heures écoulées depuis la récupération, nombre de publications ingérées. Paramètres : `product?`, `stale_only?`, `stale_hours?`. Utilisez ceci AVANT de faire confiance à `latest_releases` pour savoir si le corpus est obsolète. |
258
- | `sync_now` | **v1.2.** Actualisation à la demande (reproduit `hk sync`). Paramètres : `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. Renvoie une erreur `InvalidParams` si une autre opération `sync_now` est déjà en cours. NE COMMET PAS les modifications dans Git. |
259
+ | `sync_status` | **v1.2.** Fraîcheur de la synchronisation par produit : horodatage de la dernière récupération, heures écoulées depuis la récupération, nombre de publications ingérées. Paramètres : `product?`, `stale_only?`, `stale_hours?`. Utilisez cette fonctionnalité AVANT de faire confiance à `latest_releases` pour savoir si la base de données est obsolète. |
260
+ | `sync_now` | **v1.2.** Actualisation à la demande (similaire à `hk sync`). Paramètres : `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. Renvoie une erreur `InvalidParams` si une autre instance de `sync_now` est déjà en cours. NE COMMET PAS les modifications dans Git. |
259
261
 
260
- Les outils de la version 1.1 reproduisent `hk diff` / `hk breaking` et le flux de travail de comparaison de versions qui nécessitait auparavant des scripts. Les outils de synchronisation de la version 1.2 comblent le fossé où une session pouvait interroger le corpus mais pas le mettre à jour : `sync_status` signale l'obsolescence, `sync_now` exécute le pipeline. Consultez [le guide → serveur MCP](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) pour les schémas de paramètres complets.
262
+ Les outils v1.1 sont similaires à `hk diff` / `hk breaking` et au flux de travail de comparaison de versions qui nécessitait auparavant des scripts. Les outils de synchronisation v1.2 comblent le fossé où une session pouvait interroger la base de données, mais pas la mettre à jour : `sync_status` signale l'obsolescence, `sync_now` exécute le pipeline. Consultez [le manuel → serveur MCP](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) pour les schémas de paramètres complets.
261
263
 
262
264
  ---
263
265
 
@@ -289,12 +291,43 @@ Index complet dans [synergies/INDEX.md](synergies/INDEX.md).
289
291
 
290
292
  ---
291
293
 
294
+ ## Ensembles de données et modèles affinés
295
+
296
+ Le corpus comprend une couche descendante : des **ensembles de données** soigneusement sélectionnés dérivés de descriptions de modifications, et des **modèles affinés** entraînés sur ces ensembles de données. L'ensemble de données est l'artefact dans ce dépôt ; le modèle est descendant.
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 entrées
299
+
300
+ Chaque entrée associe une description de modification du corpus à une action rédigée manuellement : `{kind, severity, subject, action_text, deadline, tags}`. Taxonomie de 8 catégories (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), répartition 80/20 pour l'entraînement et la validation, revue par un humain et par un juge Qwen3:8b (accord de 92,4 %). Consultez [`dataset/README.md`](dataset/README.md) pour le tableau de distribution, [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) pour la description de chaque champ, et [`STYLE.md`](dataset/changelog-actions/STYLE.md) pour les règles de rédaction de la partie `action_text`.
301
+
302
+ ### `cs-actions:v1` — synthétiseur affiné
303
+
304
+ Premier modèle entraîné sur l'ensemble de données. Qwen2.5-7B-Instruct + LoRA (rang-256 / linéaire, 100 étapes QLoRA sur 242 entrées d'entraînement), format GGUF q8_0, déployé via un fichier Modelfile Ollama en deux étapes (`cs-actions-base` + `cs-actions:v1`).
305
+
306
+ **Évaluation pour la validation de la version** (ensemble de 59 entrées stratifiées, trois exécutions, toutes réussies, aucune erreur d'analyse) :
307
+
308
+ | Métrique | qwen3:8b base | cs-actions:v1 | Différence |
309
+ |---|---|---|---|
310
+ | Accord de catégorie par rapport aux données réelles | 78.0% | **88.1%** | +10,1 points de pourcentage |
311
+ | Accord de gravité par rapport aux données réelles | 52.5% | **79.7%** | +27,2 points de pourcentage |
312
+ | Macro-F1 (classes bien représentées) | 0.801 | **0.854** | +0.053 |
313
+ | Exécution 3 — suppression de l'indice de catégorie (avec indice / sans indice) | — | 0.842 / 0.777 | 6,5 points → zone cible |
314
+
315
+ Critère de validation de la version `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0,780 ≥ 0,780`) — RÉUSSI ✓. Les verdicts détaillés pour chaque entrée se trouvent dans [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json), également joints à la [publication GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) en tant que fichier unique.
316
+
317
+ **Limitation documentée de la version 1 : biais anti-`inconnu`.** La catégorie `inconnu` est la seule catégorie où cs-actions:v1 est moins performant que qwen3:8b (F1 de 0,444 contre 0,545). La précision est de 1,000 / le rappel est de 0,286 — lorsque l'entrée est réellement ambiguë, le modèle choisit une catégorie spécifique plutôt que de s'abstenir. Hérité du modèle de base de la famille qwen, et non entièrement remplacé par LoRA. Les utilisateurs doivent considérer un taux de `kind: "unknown"` inférieur à celui attendu comme un signal pour envoyer des lots à une révision humaine. Le [plan de la version 2](dataset/README.md) vise à résoudre ce problème grâce à l'augmentation de la classe inconnue et à la randomisation des indices.
318
+
319
+ **Non distribué via ce dépôt** — le fichier GGUF q8_0 fait environ 5 Go et le checkpoint fusionné fait environ 15 Go. Seuls le jeu de données et le pipeline de construction sont publiés ; le modèle est reconstruit localement conformément à [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) (chaîne manuelle en 4 étapes, environ 88 minutes de préchauffage sur un ordinateur portable RTX 5080 avec 16 Go de VRAM). Le contrat de validation pour la publication, qui comprend trois étapes, se trouve dans [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md).
320
+
321
+ Un guide d'utilisation complet, incluant l'invocation locale via Ollama, l'exigence de spécifier `format: "json"` pour chaque requête, et le pipeline de reconstruction, est disponible sur la page [du manuel → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/).
322
+
323
+ ---
324
+
292
325
  ## Tests
293
326
 
294
327
  La suite Vitest couvre les niveaux unitaires, d'intégration, de régression et de test de base. **[test-spec-3.md](test-spec-3.md) est la référence actuelle** à partir de la version v0.7.0 ; [test-spec.md](test-spec.md) (v1) et [test-spec-2.md](test-spec-2.md) (v2) restent dans le dépôt comme enregistrement historique de l'évolution de la conception.
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -305,7 +338,7 @@ Structure :
305
338
  | Dossier | Ce qu'il couvre |
306
339
  |-----|----------------|
307
340
  | `test/unit/` | par module — extraction, ingestion, requête (incl. `until` / navigation / depuis / comparaison), base de données (incl. migration de configuration de dimension v3), intégration, hybride, récupération + tous les fournisseurs (Ollama / Voyage / **OpenAI**) + récupération-RSS/changelog (incl. analyseur **keep-a-changelog**) / HTML + récupération-registre-MCP + récupération-playwright + configuration-produits + ingestion/requête de synergies. |
308
- | `test/integration/` | de bout en bout : pipeline, synchronisation, serveur MCP (JSON-RPC standard, 13 outils dont `sync_status` / `sync_now`), CLI (dont `hk diff`, `hk breaking`). |
341
+ | `test/integration/` | de bout en bout pipeline, synchronisation, serveur MCP (JSON-RPC via stdin/stdout, 13 outils dont `sync_status` / `sync_now`), CLI (dont `hk diff`, `hk breaking`) |
309
342
  | `test/regression/` | §8.1–§8.19 — chacun protège contre un bug réel corrigé pendant le développement (§8.19 : la pagination précoce de ghReleases préserve les éléments dans la fenêtre). |
310
343
  | `test/smoke/` | Test complet sur l'ensemble des fichiers (1 143 fichiers) simulant les produits réels. |
311
344
  | `test/fixtures/` | 3 produits factices + réponses HTTP simulées (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / Registre MCP officiel). |
package/README.hi.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **वर्तमान आंकड़े (v1.2.0 के अनुसार):** 44 उत्पाद / 1,171 रिलीज़ फ़ाइलें / 6,573 परिवर्तन / 1,260 इकाइयां / 12 तालमेल / 517 परीक्षण / 13 एमसीपी उपकरण / 17 सीएलआई कमांड। (डेटाबेस को `sync_now` के माध्यम से 2026-05-24 को अपडेट किया गया।)
76
+ **वर्तमान आंकड़े (v1.2.1 के अनुसार):** 44 उत्पाद / 1,171 रिलीज़ फ़ाइलें / 6,573 परिवर्तन / 1,260 इकाइयां / 12 तालमेल / 519 परीक्षण / 13 एमसीपी उपकरण / 17 सीएलआई कमांड। (डेटाबेस 2026-05-24 को `sync_now` के माध्यम से अपडेट किया गया।)
77
77
 
78
78
  ---
79
79
 
@@ -90,7 +90,9 @@ claude-synergy/
90
90
  | **4c — टर्नडाउन एचटीएमएल→मार्कडाउन इनजेस्ट** | ✅ जारी किया गया | एचटीएमएल बॉडी (कोपायलट/वीएस कोड/कर्सर) अब एफटीएस5 (FTS5) + एंटिटी एक्सट्रैक्शन के लिए प्रति-बुलेट पंक्तियाँ उत्पन्न करते हैं। |
91
91
  | **4d — प्लेराइट + एमसीपी रजिस्ट्री + YAML कॉन्फ़िगरेशन** | ✅ जारी किया गया | प्लेराइट के माध्यम से विंडसर्फ़; स्मिथरी + आधिकारिक एमसीपी रजिस्ट्री को चौथे स्तर के कैटलॉग के रूप में उपयोग किया जाता है; उत्पादों को `products.yaml` में समेकित किया गया है। |
92
92
  | **5 — v1.1 विंडो ब्राउज़िंग + ओपनएआई एम्बेड** | ✅ जारी किया गया | `hk diff` / `hk breaking`, सभी ब्राउज़िंग कमांड के लिए तारीख सीमा, 3 नए एमसीपी उपकरण (कुल 11), ओपनएआई एम्बेडिंग प्रदाता, कॉन्फ़िगर करने योग्य एम्बेडिंग आयाम, `claude-code` ऑटो-सिंक, सामान्य `keep-a-changelog` पार्सर। |
93
- | **6 — v1.2 एमसीपी से सिंक** | ✅ जारी किया गया | `sync_status` (प्रत्येक उत्पाद की ताज़ा जानकारी, कभी/पुराना पता लगाना) और `sync_now` (मांग पर डेटा प्राप्त करना → संसाधित करना → `dry_run` पूर्वावलोकन के साथ एम्बेड करना + प्रक्रिया में समवर्ती लॉक)। यह उस स्थिति को समाप्त करता है जहां कोई उपयोगकर्ता डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे अपडेट नहीं कर सकता था। **इसके अतिरिक्त, यह निम्नलिखित समस्या को भी ठीक करता है:** "मार्कर-वाइप" बग, जिसमें `INSERT OR REPLACE INTO products` कमांड `markers` विदेशी कुंजी पर एक DELETE ऑपरेशन चलाता था, जिसके कारण प्रत्येक उत्पाद के लिए `since` कर्सर हर बार डेटा आयात करने पर रीसेट हो जाता था (प्रतिगमन §8.20)। |
93
+ | **6 — v1.2 एमसीपी से सिंक** | ✅ जारी किया गया | `sync_status` (प्रत्येक उत्पाद की ताज़गी की स्थिति, कभी नहीं/पुरानी स्थिति का पता लगाना) और `sync_now` (मांग पर डेटा प्राप्त करना → संसाधित करना → `dry_run` पूर्वावलोकन के साथ एम्बेड करना + प्रक्रिया में समवर्ती लॉक)। यह उस स्थिति को समाप्त करता है जहां एक उपयोगकर्ता डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे अपडेट नहीं कर सकता था। **इसके अतिरिक्त, यह निम्नलिखित समस्या को भी ठीक करता है:** "मार्कर-वाइप" बग, जिसमें `INSERT OR REPLACE INTO products` कमांड `markers` विदेशी कुंजी पर एक DELETE ऑपरेशन चलाता था, जिसके कारण प्रत्येक उत्पाद के लिए `since` कर्सर हर बार डेटा आयात करने पर रीसेट हो जाता था (प्रतिगमन §8.20)। |
94
+ | **6.1 — v1.2.1 फ़ेचर-मार्कर केंद्रीकरण** | ✅ जारी किया गया | `writeMarker` फ़ंक्शन को `fetchOne` में केंद्रीकृत किया गया है, ताकि प्रत्येक सफल डेटा आयात के साथ मार्कर अपडेट हो जाए। पहले, उन रणनीतियों ने जो 0 इन-विंडो दिनांकित आइटम लौटाती थीं (विशेष रूप से `aider` कच्चा परिवर्तन लॉग), मार्कर नहीं लिखते थीं और हर सिंक पर `HISTORY.md` फ़ाइल को फिर से डाउनलोड करती थीं। `webfetch` रणनीति, जिसे लागू नहीं किया गया था, का नाम बदलकर `manual` कर दिया गया है, जिसका उपयोग `claude-api` और `anthropic-apps` के लिए किया जाता है; `sync_status` अब मैन्युअल उत्पादों को "never" के बजाय "manual" के रूप में प्रदर्शित करता है और उन्हें `stale_only` से बाहर रखता है (प्रतिगमन §8.21)। |
95
+ | **7 — v1.3 cs-actions:v1 फाइन-ट्यून किया गया सिंथेसाइज़र** | ✅ जारी किया गया | यह पहला डाउनस्ट्रीम मॉडल है जिसे डेटासेट पर प्रशिक्षित किया गया है। यह एक चेंजलॉग प्रविष्टि को एक सख्त-JSON एक्शन आइटम में बदलता है: `{kind, severity, subject, action_text, deadline, tags}`। Qwen2.5-7B + LoRA, `dataset/changelog-actions/v1/` से 242 प्रविष्टियों पर, q8_0 GGUF, Ollama के माध्यम से तैनात। रिलीज़-गेट मूल्यांकन: **88.1% प्रकार / 79.7% गंभीरता / 0.842 मैक्रो-एफ1** बनाम 59-प्रविष्टि के स्तरीकृत होल्डआउट पर वास्तविक डेटा (qwen3:8b बेस की तुलना में +10.1pp / +27.2pp / +0.041)। इसे `cs-actions-v1` के रूप में टैग किया गया है; मूल्यांकन रिपोर्ट को [GitHub रिलीज़](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) से एक सिंगल-फाइल डाउनलोड के रूप में संलग्न किया गया है। **दस्तावेज़ित v1 सीमा:** `अज्ञात` पूर्वाग्रह (सटीकता 1.000 / रिकॉल 0.286) — मॉडल अस्पष्ट इनपुट को कम आंकता है। [हैंडबुक → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md) देखें। |
94
96
 
95
97
  v0.8+ के लिए रोडमैप: [URGENT_FINDINGS.md](URGENT_FINDINGS.md) और मुद्दों में ट्रैक किया गया है।
96
98
 
@@ -254,10 +256,10 @@ GitHub Copilot के लिए `.vscode/mcp.json` फ़ाइल में, `m
254
256
  | `get_changes_since` | **नया।** एक समय विंडो में परिवर्तन, उत्पाद+संस्करण द्वारा समूहीकृत। इनपुट: `since` (आवश्यक), `until?`, `product?`, `kind?`, `limit?`. |
255
257
  | `search_breaking_changes` | **नया।** महत्वपूर्ण परिवर्तनों की एक सपाट सूची — किसी खोज शब्द की आवश्यकता नहीं। इनपुट: `product?`, `since?`, `until?`, `limit?`. |
256
258
  | `compare_versions` | **नया।** एक उत्पाद के दो संस्करणों के बीच सभी परिवर्तन। इनपुट: `product`, `from_version`, `to_version`. |
257
- | `sync_status` | **v1.2.** प्रत्येक उत्पाद के लिए सिंक की ताज़ा जानकारी - अंतिम डेटा प्राप्त करने का समय, डेटा प्राप्त करने के बाद से घंटे, संसाधित किए गए रिलीज़ की संख्या। इनपुट: `product?`, `stale_only?`, `stale_hours?`. `latest_releases` का उपयोग करने से पहले, यह जांचना महत्वपूर्ण है कि डेटाबेस ताज़ा है या नहीं। |
258
- | `sync_now` | **v1.2.** मांग पर डेटा ताज़ा करना (यह `hk sync` के समान है)। इनपुट: `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. यदि कोई अन्य `sync_now` प्रक्रिया चल रही है, तो यह `InvalidParams` त्रुटि प्रदर्शित करता है। यह परिवर्तन सीधे git में नहीं किए जाते हैं। |
259
+ | `sync_status` | **v1.2.** प्रत्येक उत्पाद के लिए सिंक की ताज़गी की स्थिति अंतिम डेटा आयात का समय, डेटा आयात के बाद से घंटे, संसाधित रिलीज़ की संख्या। इनपुट: `product?`, `stale_only?`, `stale_hours?`. `latest_releases` पर भरोसा करने से पहले, यह जांचना महत्वपूर्ण है कि डेटाबेस पुराना है या नहीं। |
260
+ | `sync_now` | **v1.2.** मांग पर ताज़ा करना (यह `hk sync` के समान है)। इनपुट: `product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`. यदि कोई अन्य `sync_now` प्रक्रिया चल रही है, तो यह `InvalidParams` त्रुटि प्रदर्शित करता है। यह परिवर्तन सीधे git में नहीं करता है। |
259
261
 
260
- v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण तुलना प्रक्रिया को प्रतिबिंबित करते हैं, जिसके लिए पहले स्क्रिप्टिंग की आवश्यकता होती थी। v1.2 सिंक उपकरण उस स्थिति को समाप्त करते हैं जहां कोई सत्र डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे ताज़ा नहीं कर सकता था - `sync_status` डेटाबेस की पुरानी स्थिति की रिपोर्ट करता है, और `sync_now` प्रक्रिया को चलाता है। पूर्ण इनपुट स्कीमा के लिए, [मैनुअल → एमसीपी सर्वर](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) देखें।
262
+ v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण तुलना कार्यप्रवाह को प्रतिबिंबित करते हैं, जिसके लिए पहले स्क्रिप्टिंग की आवश्यकता होती थी। v1.2 सिंक उपकरण उस स्थिति को समाप्त करते हैं जहां एक सत्र डेटाबेस से जानकारी प्राप्त कर सकता था लेकिन उसे अपडेट नहीं कर सकता था `sync_status` पुरानी स्थिति की रिपोर्ट करता है, और `sync_now` पाइपलाइन चलाता है। पूर्ण इनपुट स्कीमा के लिए, [हैंडबुक → एमसीपी सर्वर](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/) देखें।
261
263
 
262
264
  ---
263
265
 
@@ -289,12 +291,43 @@ v1.1 उपकरण `hk diff` / `hk breaking` और संस्करण त
289
291
 
290
292
  ---
291
293
 
294
+ ## डेटासेट और फाइन-ट्यून किए गए मॉडल
295
+
296
+ इस डेटासेट में एक डाउनस्ट्रीम परत है: क्यूरेटेड **डेटासेट** जो परिवर्तन विवरणों से प्राप्त किए गए हैं, और उन डेटासेट पर प्रशिक्षित **फाइन-ट्यून किए गए मॉडल**। डेटासेट इस रिपॉजिटरी में मौजूद है; मॉडल डाउनस्ट्रीम है।
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 प्रविष्टियाँ
299
+
300
+ प्रत्येक प्रविष्टि में डेटासेट से एक परिवर्तन विवरण को एक हस्तलिखित एक्शन आइटम के साथ जोड़ा गया है: `{kind, severity, subject, action_text, deadline, tags}`। 8-श्रेणी `kind` वर्गीकरण (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), 80/20 स्तरीकृत प्रशिक्षण/होल्डआउट, मानव द्वारा और क्रॉस-फैमिली qwen3:8b न्यायाधीश (92.4% सहमति) द्वारा समीक्षा की गई। वितरण तालिका के लिए [`dataset/README.md`](dataset/README.md), फ़ील्ड-दर-फ़ील्ड अनुबंध के लिए [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md), और `action_text` लेखन नियमों के लिए [`STYLE.md`](dataset/changelog-actions/STYLE.md) देखें।
301
+
302
+ ### `cs-actions:v1` — फाइन-ट्यून किया गया सिंथेसाइज़र
303
+
304
+ यह डेटासेट पर प्रशिक्षित पहला मॉडल है। Qwen2.5-7B-Instruct + LoRA (रैंक-256 / ऑल-लीनियर, 242 प्रशिक्षण प्रविष्टियों पर 100 चरण QLoRA), q8_0 GGUF, दो-चरणीय Ollama Modelfile (`cs-actions-base` + `cs-actions:v1`) के माध्यम से तैनात।
305
+
306
+ **रिलीज़-गेट मूल्यांकन** (59-प्रविष्टि स्तरीकृत होल्डआउट, तीन रन, सभी पास, शून्य पार्स त्रुटियां):
307
+
308
+ | मेट्रिक | qwen3:8b बेस | cs-actions:v1 | अंतर |
309
+ |---|---|---|---|
310
+ | वास्तविक डेटा के सापेक्ष प्रकार की सहमति | 78.0% | **88.1%** | +10.1pp |
311
+ | वास्तविक डेटा के सापेक्ष गंभीरता की सहमति | 52.5% | **79.7%** | +27.2pp |
312
+ | मैक्रो-एफ1 (अच्छी तरह से भरे गए वर्ग) | 0.801 | **0.854** | +0.053 |
313
+ | रन 3 — प्रकार-संकेत उन्मूलन (संकेत के साथ / बिना) | — | 0.842 / 0.777 | 6.5pt → लक्ष्य क्षेत्र |
314
+
315
+ रिलीज़ पास मानदंड `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0.780 ≥ 0.780`) — पास ✓। प्रत्येक प्रविष्टि के लिए पूर्ण निर्णय [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json) में, जो [GitHub रिलीज़](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) से एक सिंगल-फाइल डाउनलोड के रूप में भी संलग्न है।
316
+
317
+ **दस्तावेज़ित v1 सीमा — `अज्ञात` पूर्वाग्रह।** `अज्ञात` एकमात्र ऐसा वर्ग है जहां cs-actions:v1, qwen3:8b से खराब प्रदर्शन करता है (एफ1 0.444 बनाम 0.545)। सटीकता 1.000 / रिकॉल 0.286 — जब इनपुट वास्तव में अस्पष्ट होता है, तो मॉडल एक विशिष्ट प्रकार को चुनता है, बजाय कि वह 'अज्ञात' बताए। यह qwen-परिवार का पूर्व-निर्धारित व्यवहार है, जिसे LoRA द्वारा पूरी तरह से बदला नहीं गया है। डाउनस्ट्रीम उपयोगकर्ताओं को `kind: "unknown"` की दर को अपेक्षित से कम होने के संकेत के रूप में देखना चाहिए, और बैचों को मानव समीक्षा के लिए भेजना चाहिए। [v2 योजना](dataset/README.md) अज्ञात-वर्ग संवर्धन और संकेत-यादृच्छिकरण के साथ इस समस्या का समाधान करती है।
318
+
319
+ **यह फ़ाइल इस रिपॉजिटरी के माध्यम से वितरित नहीं की जाती है** - q8_0 GGUF फ़ाइल लगभग 5 GB की है, और मर्ज की गई चेकपॉइंट फ़ाइल लगभग 15 GB की है। डेटासेट और बिल्ड पाइपलाइन ही प्रकाशित किए गए हैं; मॉडल को स्थानीय रूप से फिर से बनाया जाता है, जैसा कि [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) में बताया गया है (4-चरणीय मैनुअल प्रक्रिया, RTX 5080 लैपटॉप पर 16 GB VRAM के साथ लगभग 88 मिनट का समय लगता है)। तीन बार चलने वाले रिलीज़-गेट अनुबंध [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md) में मौजूद हैं।
320
+
321
+ पूर्ण उपयोग विवरण - जिसमें स्थानीय ओलामा का उपयोग, प्रत्येक अनुरोध के लिए `format: "json"` की आवश्यकता, और बिल्ड पाइपलाइन शामिल हैं - [हैंडबुक → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) पेज पर उपलब्ध है।
322
+
323
+ ---
324
+
292
325
  ## परीक्षण।
293
326
 
294
327
  विटेस्ट (Vitest) में यूनिट, इंटीग्रेशन, रिग्रेशन और स्मोक परीक्षण शामिल हैं। v0.7.0 के अनुसार, "[test-spec-3.md](test-spec-3.md)" वर्तमान में आधिकारिक दस्तावेज है; [test-spec.md](test-spec.md) (v1) और [test-spec-2.md](test-spec-2.md) (v2) डिज़ाइन के ऐतिहासिक रिकॉर्ड के रूप में रिपॉजिटरी में मौजूद हैं।
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -305,7 +338,7 @@ pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
305
338
  | मुझे खेद है, लेकिन मैं इस अनुरोध को पूरा करने में असमर्थ हूं क्योंकि यह अपूर्ण है। कृपया पूरा वाक्य या पाठ प्रदान करें जिसका आप अनुवाद करवाना चाहते हैं। | यह क्या शामिल करता है। |
306
339
  |-----|----------------|
307
340
  | `test/unit/` | प्रति-मॉड्यूल — निकालें, इनजेस्ट करें, क्वेरी करें (शामिल `until` / ब्राउज़ / since / तुलना), डेटाबेस (शामिल dim-config v3 माइग्रेशन), एम्बेड, हाइब्रिड, फेच + प्रत्येक प्रदाता (Ollama / Voyage / **OpenAI**) + फेच-rss/changelog (शामिल **keep-a-changelog** पार्सर)/html + फेच-mcp-registry + फेच-playwright + उत्पादों-कॉन्फ़िग + सि synergy इनजेस्ट/क्वेरी |
308
- | `test/integration/` | एंड-टू-एंड — पाइपलाइन, सिंक, एमसीपी सर्वर (मानक इनपुट/आउटपुट JSON-RPC, 13 उपकरण, जिनमें `sync_status` / `sync_now` शामिल हैं), सीएलआई (जिनमें `hk diff`, `hk breaking` शामिल हैं)। |
341
+ | `test/integration/` | एंड-टू-एंड — पाइपलाइन, सिंक, एमसीपी सर्वर (stdio JSON-RPC, 13 उपकरण जिनमें `sync_status` / `sync_now` शामिल हैं), सीएलआई (जिनमें `hk diff`, `hk breaking` शामिल हैं)। |
309
342
  | `test/regression/` | §8.1–§8.19 — प्रत्येक एक वास्तविक बग से बचाता है जिसे विकास के दौरान ठीक किया गया था (§8.19: ghReleases शुरुआती-निकास पेजिंग विंडो में आइटम को संरक्षित करता है) |
310
343
  | `test/smoke/` | पूर्ण डेटासेट, वास्तविक `products/` (1,143 फ़ाइलें) के लिए। |
311
344
  | `test/fixtures/` | 3 नकली उत्पाद + मॉक एचटीटीपी प्रतिक्रियाएं (RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / आधिकारिक MCP रजिस्ट्री)। |
package/README.it.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Dati aggiornati (alla versione v1.2.0):** 44 prodotti / 1.171 file di rilascio / 6.573 modifiche / 1.260 entità / 12 sinergie / 517 test / 13 strumenti MCP / 17 comandi CLI. (Il database è stato aggiornato tramite `sync_now` il 24 maggio 2026.)
76
+ **Dati aggiornati (alla versione v1.2.1):** 44 prodotti / 1.171 file di rilascio / 6.573 modifiche / 1.260 entità / 12 sinergie / 519 test / 13 strumenti MCP / 17 comandi CLI. (Il database è stato aggiornato tramite `sync_now` il 24 maggio 2026.)
77
77
 
78
78
  ---
79
79
 
@@ -91,6 +91,8 @@ claude-synergy/
91
91
  | **4d — Playwright + registro MCP + configurazione YAML** | ✅ implementato | Windsurf tramite Playwright; Smithery + registro ufficiale MCP come cataloghi del livello 4; prodotti consolidati in `products.yaml`. |
92
92
  | **5 — v1.1: navigazione con finestre + integrazione OpenAI** | ✅ implementato | `hk diff` / `hk breaking`, limiti di data per tutti i comandi di navigazione, 3 nuovi strumenti MCP (totale di 11), provider di embedding OpenAI, dimensione dell'embedding configurabile, sincronizzazione automatica di `claude-code`, parser generico `keep-a-changelog`. |
93
93
  | **6 — v1.2: sincronizzazione da MCP** | ✅ implementato | `sync_status` (freschezza per prodotto, rilevamento di dati obsoleti) e `sync_now` (recupero su richiesta → ingestione → embedding con anteprima `dry_run` + blocco di concorrenza in-process). Risolve il problema in cui un'applicazione poteva interrogare il database ma non aggiornarlo. **Corregge anche:** un bug che causava la cancellazione di tutti i marker quando `INSERT OR REPLACE INTO products` propagava una cancellazione sulla chiave esterna `markers`, reimpostando silenziosamente il cursore `since` di ogni prodotto ad ogni ingestione (regressione §8.20). |
94
+ | **6.1 — v1.2.1: centralizzazione del marcatore di recupero** | ✅ implementato | È stato centralizzato il metodo `writeMarker` in `fetchOne` in modo che ogni recupero riuscito aggiorni il marcatore. Le strategie che restituivano 0 elementi datati all'interno dell'intervallo (in particolare, il log delle modifiche "raw" di `aider`) non scrivevano mai un marcatore e ri-scaricavano sempre `HISTORY.md` ad ogni sincronizzazione. La strategia `webfetch` non implementata è stata rinominata in `manual` per `claude-api` e `anthropic-apps`; ora `sync_status` visualizza i prodotti manuali come "manual" invece di "mai" ed esclude questi prodotti da `stale_only` (regressione §8.21). |
95
+ | **7 — v1.3: sintetizzatore ottimizzato cs-actions:v1** | ✅ implementato | Primo modello downstream addestrato sul database. Converte una voce del log delle modifiche in un'azione in formato JSON rigoroso: `{kind, severity, subject, action_text, deadline, tags}`. Modello Qwen2.5-7B + LoRA su 242 voci di `dataset/changelog-actions/v1/`, in formato GGUF q8_0, distribuito tramite Ollama. Valutazione preliminare: **88,1% per la classificazione (kind) / 79,7% per la gravità (severity) / 0,842 macro-F1** rispetto ai dati di riferimento su 59 voci stratificate (+10,1 punti percentuali / +27,2 punti percentuali / +0,041 rispetto al modello base qwen3:8b). È stato assegnato il tag `cs-actions-v1`; il rapporto di valutazione è allegato al [rilascio di GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) come download di un singolo file. **Limitazione documentata della versione 1:** pregiudizio anti-"sconosciuto" (precisione 1,000 / richiamo 0,286) — il modello sottostima la classificazione di input ambigui. Consultare [manuale → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md). |
94
96
 
95
97
  Roadmap per la versione 0.8+: disponibile in [URGENT_FINDINGS.md](URGENT_FINDINGS.md) e nella sezione issues.
96
98
 
@@ -289,12 +291,43 @@ Indice completo in [synergies/INDEX.md](synergies/INDEX.md).
289
291
 
290
292
  ---
291
293
 
294
+ ## Dataset e modelli ottimizzati
295
+
296
+ Il database ha un livello downstream: **dataset** curati derivati da voci di log delle modifiche e **modelli ottimizzati** addestrati su tali dataset. Il dataset è l'artefatto in questo repository; il modello è downstream.
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 voci
299
+
300
+ Ogni voce associa una voce di log delle modifiche dal database a un'azione scritta a mano: `{kind, severity, subject, action_text, deadline, tags}`. Tassonomia `kind` con 8 valori possibili (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), suddivisione in training/holdout 80/20, revisionato da esseri umani e da un modello qwen3:8b (accordo del 92,4%). Consultare [`dataset/README.md`](dataset/README.md) per la tabella di distribuzione, [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) per la descrizione dei campi e [`STYLE.md`](dataset/changelog-actions/STYLE.md) per le regole di scrittura di `action_text`.
301
+
302
+ ### `cs-actions:v1` — sintetizzatore ottimizzato
303
+
304
+ Primo modello addestrato sul dataset. Modello Qwen2.5-7B-Instruct + LoRA (rank-256 / all-linear, 100 passaggi QLoRA su 242 voci di training), in formato GGUF q8_0, distribuito tramite un Modelfile Ollama a due fasi (`cs-actions-base` + `cs-actions:v1`).
305
+
306
+ **Valutazione preliminare** (59 voci stratificate, tre esecuzioni, tutte superate, zero errori di parsing):
307
+
308
+ | Metrica | qwen3:8b base | cs-actions:v1 | Delta |
309
+ |---|---|---|---|
310
+ | Accordo con la classificazione rispetto ai dati di riferimento | 78.0% | **88.1%** | +10,1pp |
311
+ | Accordo con la gravità rispetto ai dati di riferimento | 52.5% | **79.7%** | +27,2pp |
312
+ | Macro-F1 (classi ben popolate) | 0.801 | **0.854** | +0.053 |
313
+ | Esecuzione 3 — rimozione del suggerimento (con suggerimento / senza) | — | 0.842 / 0.777 | 6,5 punti → zona target |
314
+
315
+ Criterio di superamento della valutazione `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0,780 ≥ 0,780`) — PASS ✓. I risultati dettagliati per ogni voce sono disponibili in [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json), allegato anche al [rilascio di GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) come download di un singolo file.
316
+
317
+ **Limitazione documentata della versione v1: pregiudizio nei confronti di "unknown".** "unknown" è l'unica classe in cui cs-actions:v1 ottiene risultati inferiori rispetto a qwen3:8b (F1 0.444 vs 0.545). Precisione 1.000 / richiamo 0.286: quando l'input è genuinamente ambiguo, il modello si orienta verso una categoria specifica anziché astenersi. Ha ereditato le caratteristiche della famiglia qwen, che non sono state completamente sovrascritte tramite LoRA. I sistemi che utilizzano questo modello dovrebbero considerare una percentuale di "kind: "unknown"" inferiore al previsto come un segnale per indirizzare i batch a una revisione umana. Il [piano per la versione v2](dataset/README.md) affronta questo problema con l'aumento della classe "unknown" e la randomizzazione degli indizi.
318
+
319
+ **Non distribuito tramite questo repository** — il file GGUF q8_0 ha una dimensione di circa 5 GB e il checkpoint unito ha una dimensione di circa 15 GB. Il dataset e la pipeline di costruzione sono ciò che viene pubblicato; il modello viene ricostruito localmente secondo le istruzioni in [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) (sequenza manuale in 4 fasi, circa 88 minuti di riscaldamento su un laptop RTX 5080 con 16 GB di VRAM). Il contratto di rilascio, che prevede tre iterazioni, è disponibile in [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md).
320
+
321
+ Una guida completa all'utilizzo, inclusa l'invocazione locale tramite Ollama, il requisito di specificare `format: "json"` per ogni richiesta e la pipeline di ricostruzione, è disponibile nella pagina [handbook → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/).
322
+
323
+ ---
324
+
292
325
  ## Test
293
326
 
294
327
  La suite di test Vitest copre i livelli di unità, integrazione, regressione e test preliminari. **[test-spec-3.md](test-spec-3.md) è la documentazione di riferimento corrente** a partire dalla versione 0.7.0; [test-spec.md](test-spec.md) (versione 1) e [test-spec-2.md](test-spec-2.md) (versione 2) rimangono nel repository come documentazione storica della progettazione.
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
package/README.ja.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **現在の数値 (v1.2.0時点):** 44製品 / 1,171リリースファイル / 6,573変更 / 1,260エンティティ / 12の相乗効果 / 517テスト / 13のMCPツール / 17のCLIコマンド。 (コーパスは2026年5月24日に`sync_now`で更新されました。)
76
+ **現在の数値 (v1.2.1時点):** 44製品 / 1,171リリースファイル / 6,573変更 / 1,260エンティティ / 12の相乗効果 / 519テスト / 13のMCPツール / 17のCLIコマンド。 (2026年5月24日に`sync_now`でコーパスを更新しました。)
77
77
 
78
78
  ---
79
79
 
@@ -90,7 +90,9 @@ claude-synergy/
90
90
  | **4c — turndown HTML→Markdownインジェスト** | ✅ リリース済み | HTMLの本文(Copilot/VS Code/Cursor)が、FTS5とエンティティ抽出のための、行ごとのリストを生成 |
91
91
  | **4d — Playwright + MCPレジストリ + YAML設定** | ✅ リリース済み | WindsurfはPlaywright経由; Smitheryと公式MCPレジストリをTier-4カタログとして使用; 製品は`products.yaml`に統合 |
92
92
  | **5 — v1.1:ウィンドウ表示機能 + OpenAIの埋め込み機能** | ✅ リリース済み | `hk diff` / `hk breaking`:すべての閲覧コマンドで日付範囲を指定可能。3つの新しいMCPツール(合計11個)、OpenAIの埋め込み機能、設定可能な埋め込み次元、`claude-code`の自動同期、汎用的な`keep-a-changelog`パーサー。 |
93
- | **6 — v1.2 MCPからの同期** | ✅ リリース済み | `sync_status`(製品ごとの鮮度、古くなったものの検出)と`sync_now`(オンデマンドでの取得→取り込み→埋め込み。`dry_run`によるプレビュー機能付き。取り込み処理中の同時実行を制限)。コーパスを問い合わせることはできるが、更新できないという問題を解決します。**また、以下の問題を修正:** `INSERT OR REPLACE INTO products`によって`markers`の外部キーにDELETEが連鎖し、各製品の`since`カーソルが取り込みのたびにリセットされていたバグ(回帰 §8.20)。 |
93
+ | **6 — v1.2 sync-from-MCP** | ✅ リリース済み | `sync_status`(製品ごとの鮮度、"never"または"stale"の状態検出)と`sync_now`(オンデマンドでの取得→取り込み→埋め込み。`dry_run`プレビューと、処理中の同時実行ロック機能付き)。 これにより、コーパスを問い合わせできるものの、更新できないという問題を解消します。 **また、以下の問題を修正:** `INSERT OR REPLACE INTO products`によって`markers`の外部キーにDELETEが連鎖し、すべての製品の`since`カーソルが、取り込みのたびにリセットされていたバグ(回帰 §8.20)。 |
94
+ | **6.1 — v1.2.1 fetcher-markerの中央管理** | ✅ リリース済み | `fetchOne`内で`writeMarker`を中央管理化し、すべての正常な取得でマーカーを更新するようにしました。 以前は、一定期間内に0件のアイテムを返した戦略(特に`aider`のraw-changelog)は、マーカーを書き込まず、`HISTORY.md`を毎回再取得していました。 実装されていない`webfetch`戦略を、`claude-api`および`anthropic-apps`向けに`manual`に改名しました。 `sync_status`では、現在、手動で設定された製品を"never"ではなく"manual"として表示し、`stale_only`から除外するようにしました(回帰 §8.21)。 |
95
+ | **7 — v1.3 cs-actions:v1 ファインチューニングされたシンセサイザー** | ✅ リリース済み | このモデルは、最初にトレーニングされたダウンストリームモデルです。変更履歴のエントリを、厳密なJSON形式のアクションアイテム `{kind, severity, subject, action_text, deadline, tags}` に変換します。Qwen2.5-7B + LoRA を使用し、`dataset/changelog-actions/v1/` から取得した242のエントリでトレーニング。q8_0 GGUF形式で、Ollamaを使用してデプロイされています。リリース前の評価では、**kind に関して 88.1%、severity に関して 79.7%、macro-F1 が 0.842** という結果であり、これは59エントリの検証データセットにおける ground truth と比較して、qwen3:8b のベースモデルと比較してそれぞれ +10.1pp、+27.2pp、+0.041 の改善です。`cs-actions-v1` というタグが付けられ、評価レポートは[GitHub Release](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) に単一ファイルとして添付されています。**v1 の制限事項として、`unknown` バイアス** が文書化されています (precision 1.000 / recall 0.286)。これは、モデルが曖昧な入力を適切に判断せず、誤ったカテゴリに分類してしまうことを意味します。詳細については、[handbook → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/)、[`dataset/README.md`](dataset/README.md)、[`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md)、[`EVAL.md`](dataset/changelog-actions/v1/EVAL.md) を参照してください。 |
94
96
 
95
97
  v0.8以降のロードマップ:[URGENT_FINDINGS.md](URGENT_FINDINGS.md)およびissueで追跡中。
96
98
 
@@ -254,10 +256,10 @@ GitHub Copilotの`.vscode/mcp.json`ファイルでは、`mcpServers`ではなく
254
256
  | `get_changes_since` | **新規。** 製品とバージョンごとにグループ化された、時間範囲内の変更点。入力:`since`(必須)、`until?`、`product?`、`kind?`、`limit?`。 |
255
257
  | `search_breaking_changes` | **新規。** 検索語句不要の、変更点のフラットリスト。入力:`product?`、`since?`、`until?`、`limit?`。 |
256
258
  | `compare_versions` | **新規。** 単一の製品の2つのバージョン間のすべての変更点。入力:`product`、`from_version`、`to_version`。 |
257
- | `sync_status` | **v1.2.** 製品ごとの同期鮮度:最終取得日時、取得からの経過時間、取り込んだリリース数。入力パラメータ:`product?`, `stale_only?`, `stale_hours?`。`latest_releases`を使用する前に、コーパスが最新の状態かどうかを確認するために使用してください。 |
258
- | `sync_now` | **v1.2.** オンデマンドでの更新(`hk sync`と同様)。入力パラメータ:`product?`, `dry_run?`, `include_ingest?`, `include_embed?`, `timeout_ms?`。別の`sync_now`が実行中の場合、`InvalidParams`エラーで拒否されます。Gitへのコミットは行いません。 |
259
+ | `sync_status` | **v1.2.** 製品ごとの同期の鮮度:最終取得時刻、取得からの経過時間、取り込まれたリリース数。 入力:`product?`、`stale_only?`、`stale_hours?`。 `latest_releases`を信頼する前に、コーパスが最新の状態かどうかを確認するために使用してください。 |
260
+ | `sync_now` | **v1.2.** オンデマンドでの更新(`hk sync`と同様)。 入力:`product?`、`dry_run?`、`include_ingest?`、`include_embed?`、`timeout_ms?`。 別の`sync_now`が実行中の場合、`InvalidParams`エラーで拒否されます。 Gitへのコミットは行いません。 |
259
261
 
260
- v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプトが必要だったバージョン比較のワークフローを模倣しています。v1.2の同期ツールは、セッションがコーパスを問い合わせることはできるが、更新できないという問題を解決します。`sync_status`は鮮度を報告し、`sync_now`はパイプラインを実行します。完全な入力スキーマについては、[マニュアル → MCPサーバー](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/)を参照してください。
262
+ v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプトが必要だったバージョン比較のワークフローを模倣しています。 v1.2の同期ツールは、セッションがコーパスを問い合わせできるものの、更新できないという問題を解消します。 `sync_status`は鮮度を報告し、`sync_now`はパイプラインを実行します。 完全な入力スキーマについては、[マニュアル → MCPサーバー](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/mcp-server/)を参照してください。
261
263
 
262
264
  ---
263
265
 
@@ -289,12 +291,43 @@ v1.1のツールは、`hk diff` / `hk breaking`および、以前はスクリプ
289
291
 
290
292
  ---
291
293
 
294
+ ## データセットとファインチューニングされたモデル
295
+
296
+ このリポジトリには、変更履歴から作成された **データセット** と、それらのデータセットでトレーニングされた **ファインチューニングされたモデル** が含まれています。データセットはリポジトリ内のファイルであり、モデルはダウンストリームで使用されます。
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 エントリ
299
+
300
+ 各エントリは、変更履歴からの変更内容と、手書きで作成されたアクションアイテム `{kind, severity, subject, action_text, deadline, tags}` を組み合わせたものです。`kind` は 8 つのカテゴリ(`breaking | deprecation | security | feature | fix | performance | docs | unknown`)を持つタクソノミーであり、80/20 の割合でトレーニングデータと検証データに分割されています。A3c によるレビューは、人間と qwen3:8b の判断者によって行われ、92.4% の合意が得られました。分布については [`dataset/README.md`](dataset/README.md) を、各フィールドの説明については [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) を、アクションテキストの書き方については [`STYLE.md`](dataset/changelog-actions/STYLE.md) を参照してください。
301
+
302
+ ### `cs-actions:v1` — ファインチューニングされたシンセサイザー
303
+
304
+ このモデルは、データセットでトレーニングされた最初のモデルです。Qwen2.5-7B-Instruct + LoRA (rank-256 / all-linear, 100 steps QLoRA) を使用し、242 のトレーニングエントリでトレーニング。q8_0 GGUF 形式で、Ollama Modelfile (`cs-actions-base` + `cs-actions:v1`) を使用してデプロイされています。
305
+
306
+ **リリース前の評価** (59 エントリの検証データセット、3 回の実行、すべて合格、パースエラーはゼロ):
307
+
308
+ | 指標 | qwen3:8b (ベース) | cs-actions:v1 | 差分 |
309
+ |---|---|---|---|
310
+ | ground truth との kind の一致率 | 78.0% | **88.1%** | +10.1pp |
311
+ | ground truth との severity の一致率 | 52.5% | **79.7%** | +27.2pp |
312
+ | Macro-F1 (十分に多くのカテゴリが存在する場合) | 0.801 | **0.854** | +0.053 |
313
+ | 3 回目の実行 — kind のヒントの有無による比較 | — | 0.842 / 0.777 | 6.5pt → 目標範囲 |
314
+
315
+ リリース基準: `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0.780 ≥ 0.780`) — 合格 ✓。各エントリの詳細な結果は [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json) に記載されており、[GitHub Release](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) に単一ファイルとして添付されています。
316
+
317
+ **v1 の制限事項 — `unknown` バイアス。** `unknown` は、cs-actions:v1 が qwen3:8b よりも性能が低い唯一のカテゴリです (F1 スコア 0.444 vs 0.545)。precision は 1.000、recall は 0.286 であり、入力が実際に曖昧な場合、モデルは特定のカテゴリに分類する傾向があり、不明と判断しません。このバイアスは、qwen ファミリーの既存の傾向に由来し、LoRA によって完全に修正されていません。ダウンストリームの利用者は、期待よりも `kind: "unknown"` の割合が低い場合、そのバッチを人間のレビューに回すようにする必要があります。この問題は、[v2 の計画](dataset/README.md) で、`unknown` クラスのデータ拡張とヒントのランダム化によって解決される予定です。
318
+
319
+ **このリポジトリからは配布されません**。q8_0形式のGGUFファイルは約5GB、マージされたチェックポイントは約15GBです。公開されているのはデータセットとビルドパイプラインであり、モデルはローカルで再構築されます(詳細については[`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md)を参照)。4段階の手動プロセスで、RTX 5080のノートパソコン(16GBのVRAM)で約88分かかります。リリースに関する契約は[`EVAL.md`](dataset/changelog-actions/v1/EVAL.md)に記載されています。
320
+
321
+ ローカルでのOllamaの利用方法、リクエストごとに`format: "json"`を指定する必要性、および再構築パイプラインなど、詳細な利用方法については、[ハンドブック → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/)のページをご覧ください。
322
+
323
+ ---
324
+
292
325
  ## テスト
293
326
 
294
327
  Vitestスイートは、ユニットテスト、統合テスト、回帰テスト、および初期動作確認(smoke)の各レベルをカバーします。**[test-spec-3.md](test-spec-3.md)が現在の仕様**です(v0.7.0時点)。[test-spec.md](test-spec.md)(v1)および[test-spec-2.md](test-spec-2.md)(v2)は、設計の経緯を示すための履歴として、リポジトリに残っています。
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -305,7 +338,7 @@ pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
305
338
  | ディレクトリ | 内容 |
306
339
  |-----|----------------|
307
340
  | `test/unit/` | モジュールごと — 抽出、取り込み、クエリ(`until` / 閲覧 / `since` / 比較を含む)、データベース(次元設定v3移行を含む)、埋め込み、ハイブリッド、取り込み + すべてのプロバイダー(Ollama / Voyage / **OpenAI**)+ RSS/変更ログの取り込み(**keep-a-changelog**パーサーを含む)/HTML + MCPレジストリの取り込み + Playwrightの取り込み + 製品設定 + 連携の取り込み/クエリ |
308
- | `test/integration/` | エンドツーエンド:パイプライン、同期、MCPサーバー(stdio JSON-RPC、13のツールを含む。`sync_status` / `sync_now`など)、CLI(`hk diff`、`hk breaking`など)。 |
341
+ | `test/integration/` | エンドツーエンド:パイプライン、同期、MCPサーバー(stdio JSON-RPC、13のツール(`sync_status` / `sync_now`を含む)、CLI(`hk diff`、`hk breaking`を含む)) |
309
342
  | `test/regression/` | §8.1–§8.19 — それぞれが、開発中に修正された実際のバグに対する対策。(§8.19:ghReleasesの早期終了ページネーションは、指定範囲内のアイテムを保持します) |
310
343
  | `test/smoke/` | 実際の`products/`ディレクトリ(1,143個のファイル)に対するフルコーパスのテスト。 |
311
344
  | `test/fixtures/` | 3つのダミー製品と、モックHTTPレスポンス(RSS / GH / Voyage / Cohere / Ollama / Anthropic / Smithery / 公式MCPレジストリ)。 |
package/README.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Live numbers (as of v1.2.0):** 44 products / 1,171 release files / 6,573 changes / 1,260 entities / 12 synergies / 517 tests / 13 MCP tools / 17 CLI commands. (Corpus refreshed via `sync_now` on 2026-05-24.)
76
+ **Live numbers (as of v1.2.1):** 44 products / 1,171 release files / 6,573 changes / 1,260 entities / 12 synergies / 519 tests / 13 MCP tools / 17 CLI commands. (Corpus refreshed via `sync_now` on 2026-05-24.)
77
77
 
78
78
  ---
79
79
 
@@ -91,8 +91,10 @@ claude-synergy/
91
91
  | **4d — Playwright + MCP registry + YAML config** | ✅ shipped | Windsurf via Playwright; Smithery + official MCP Registry as Tier-4 catalogs; products consolidated into `products.yaml` |
92
92
  | **5 — v1.1 windowed browsing + OpenAI embed** | ✅ shipped | `hk diff` / `hk breaking`, date bounds across all browsing commands, 3 new MCP tools (11 total), OpenAI embedding provider, configurable embedding dimension, `claude-code` auto-sync, generic `keep-a-changelog` parser |
93
93
  | **6 — v1.2 sync-from-MCP** | ✅ shipped | `sync_status` (per-product freshness, never/stale detection) and `sync_now` (on-demand fetch → ingest → embed with `dry_run` preview + in-process concurrency lock). Closes the seam where a calling agent could query the corpus but not refresh it. **Also fixes:** marker-wipe bug where `INSERT OR REPLACE INTO products` cascaded a DELETE on the `markers` FK, silently resetting every product's `since` cursor on each ingest (regression §8.20). |
94
+ | **6.1 — v1.2.1 fetcher-marker centralization** | ✅ shipped | Centralized `writeMarker` in `fetchOne` so every successful fetch updates the marker — pre-fix, strategies that returned 0 in-window dated items (most notably `aider` raw-changelog) never wrote a marker and re-pulled `HISTORY.md` on every sync. Renamed unimplemented `webfetch` strategy to `manual` for `claude-api` + `anthropic-apps`; `sync_status` now renders manual products as "manual" instead of "never" and excludes them from `stale_only` (regression §8.21). |
95
+ | **7 — v1.3 cs-actions:v1 fine-tuned synthesizer** | ✅ shipped | First downstream model trained on the corpus. Converts one changelog entry → one strict-JSON action item `{kind, severity, subject, action_text, deadline, tags}`. Qwen2.5-7B + LoRA on 242 entries from `dataset/changelog-actions/v1/`, q8_0 GGUF, Ollama-deployed. Release-gate eval: **88.1% kind / 79.7% severity / 0.842 macro-F1** vs ground truth on 59-entry stratified holdout (+10.1pp / +27.2pp / +0.041 over qwen3:8b base). Tagged `cs-actions-v1`; eval report attached to the [GitHub Release](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) as a single-file download. **Documented v1 limitation:** anti-`unknown` bias (precision 1.000 / recall 0.286) — model under-flags ambiguous inputs. See [handbook → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md). |
94
96
 
95
- Roadmap beyond v1.2: tracked in [URGENT_FINDINGS.md](URGENT_FINDINGS.md) and issues.
97
+ Roadmap beyond v1.3: tracked in [URGENT_FINDINGS.md](URGENT_FINDINGS.md) and issues.
96
98
 
97
99
  ---
98
100
 
@@ -289,12 +291,43 @@ Full index in [synergies/INDEX.md](synergies/INDEX.md).
289
291
 
290
292
  ---
291
293
 
294
+ ## Datasets and fine-tuned models
295
+
296
+ The corpus has a downstream layer: curated **datasets** derived from change bullets, and **fine-tuned models** trained on those datasets. The dataset is the artifact in this repo; the model is downstream.
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 entries
299
+
300
+ Each entry pairs one change bullet from the corpus with a hand-written action item: `{kind, severity, subject, action_text, deadline, tags}`. 8-enum `kind` taxonomy (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), stratified 80/20 train/holdout, A3c-reviewed by human + cross-family qwen3:8b judge (92.4% agreement). See [`dataset/README.md`](dataset/README.md) for the distribution table, [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) for the field-by-field contract, and [`STYLE.md`](dataset/changelog-actions/STYLE.md) for the `action_text` writing rules.
301
+
302
+ ### `cs-actions:v1` — fine-tuned synthesizer
303
+
304
+ First model trained on the dataset. Qwen2.5-7B-Instruct + LoRA (rank-256 / all-linear, 100 steps QLoRA on 242 training entries), q8_0 GGUF, deployed via two-stage Ollama Modelfile (`cs-actions-base` + `cs-actions:v1`).
305
+
306
+ **Release-gate eval** (59-entry stratified holdout, three runs, all passed, zero parse errors):
307
+
308
+ | Metric | qwen3:8b base | cs-actions:v1 | Delta |
309
+ |---|---|---|---|
310
+ | Kind agreement vs ground truth | 78.0% | **88.1%** | +10.1pp |
311
+ | Severity agreement vs ground truth | 52.5% | **79.7%** | +27.2pp |
312
+ | Macro-F1 (well-populated classes) | 0.801 | **0.854** | +0.053 |
313
+ | Run 3 — kind-hint ablation (with hint / without) | — | 0.842 / 0.777 | 6.5pt → target zone |
314
+
315
+ Release pass criterion `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0.780 ≥ 0.780`) — PASS ✓. Full per-entry verdicts in [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json), also attached to the [GitHub Release](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) as a single-file download.
316
+
317
+ **Documented v1 limitation — anti-`unknown` bias.** `unknown` is the only class where cs-actions:v1 underperforms qwen3:8b (F1 0.444 vs 0.545). Precision 1.000 / recall 0.286 — when input is genuinely ambiguous, the model commits to a specific kind rather than abstain. Inherited qwen-family prior, not fully overridden by the LoRA. Downstream consumers should treat a lower-than-expected `kind: "unknown"` rate as a signal to route batches to human review. The [v2 plan](dataset/README.md) addresses this with unknown-class augmentation plus hint-randomization.
318
+
319
+ **Not distributed through this repo** — the q8_0 GGUF is ~5 GB and the merged checkpoint is ~15 GB. The dataset and the build pipeline are what's published; the model rebuilds locally per [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) (4-stage manual chain, ~88 min warm on RTX 5080 Laptop 16 GB VRAM). The three-run release-gate contract lives in [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md).
320
+
321
+ Full usage walkthrough — including local Ollama invocation, the `format: "json"` per-request caller requirement, and the rebuild pipeline — is on the [handbook → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) page.
322
+
323
+ ---
324
+
292
325
  ## Testing
293
326
 
294
327
  Vitest suite covers unit / integration / regression / smoke tiers. **[test-spec-3.md](test-spec-3.md) is the current authority** as of v0.7.0; [test-spec.md](test-spec.md) (v1) and [test-spec-2.md](test-spec-2.md) (v2) remain in the repo as historical record of the design lineage.
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
package/README.pt-BR.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **Números atualizados (versão 1.2.0):** 44 produtos / 1.171 arquivos de lançamento / 6.573 alterações / 1.260 entidades / 12 sinergias / 517 testes / 13 ferramentas MCP / 17 comandos de linha de comando. (O corpus foi atualizado via `sync_now` em 24 de maio de 2026.)
76
+ **Números atualizados (versão 1.2.1):** 44 produtos / 1.171 arquivos de lançamento / 6.573 alterações / 1.260 entidades / 12 sinergias / 519 testes / 13 ferramentas MCP / 17 comandos de linha de comando. (O corpus foi atualizado via `sync_now` em 24 de maio de 2026.)
77
77
 
78
78
  ---
79
79
 
@@ -91,6 +91,8 @@ claude-synergy/
91
91
  | **4d — Playwright + registro MCP + configuração YAML** | ✅ implementado | Windsurf via Playwright; Smithery + registro oficial MCP como catálogos da etapa 4; produtos consolidados em `products.yaml`. |
92
92
  | **5 — Navegação com janelas (v1.1) + incorporação da OpenAI** | ✅ implementado | `hk diff` / `hk breaking`, limites de data em todos os comandos de navegação, 3 novas ferramentas MCP (total de 11), provedor de incorporação da OpenAI, dimensão de incorporação configurável, sincronização automática do `claude-code`, analisador genérico `keep-a-changelog`. |
93
93
  | **6 — v1.2 sync-from-MCP** | ✅ implementado | `sync_status` (frescor por produto, detecção de "obsoleto") e `sync_now` (busca sob demanda → ingestão → incorporação com visualização "dry_run" + bloqueio de concorrência em processo). Elimina a lacuna onde um agente poderia consultar o corpus, mas não atualizá-lo. **Corrige também:** um erro em que a exclusão de marcadores, ao usar `INSERT OR REPLACE INTO products`, causava uma exclusão em cascata na chave estrangeira `markers`, reiniciando silenciosamente o cursor "since" de cada produto a cada ingestão (regressão §8.20). |
94
+ | **6.1 — Centralização do marcador de recuperação (versão 1.2.1)** | ✅ implementado | Centralizei a função `writeMarker` em `fetchOne` para que cada recuperação bem-sucedida atualize o marcador. Estratégias que retornavam 0 itens datados dentro do período especificado (principalmente o "changelog" bruto do `aider`) nunca escreviam um marcador e, portanto, baixavam o arquivo `HISTORY.md` a cada sincronização. Renomeei a estratégia `webfetch` não implementada para `manual` para as APIs `claude-api` e `anthropic-apps`. Agora, o `sync_status` exibe os produtos configurados como "manual" em vez de "nunca" e os exclui do processo `stale_only` (regressão §8.21). |
95
+ | **7 — v1.3 cs-actions:v1, sintetizador ajustado** | ✅ implementado | Primeiro modelo derivado treinado no conjunto de dados. Converte uma entrada do changelog em um item de ação estrito em formato JSON: `{kind, severity, subject, action_text, deadline, tags}`. Qwen2.5-7B + LoRA em 242 entradas de `dataset/changelog-actions/v1/`, formato GGUF q8_0, implantado via Ollama. Avaliação para lançamento: **88,1% de precisão em "kind" / 79,7% de precisão em "severity" / 0,842 de macro-F1** em comparação com a referência em 59 entradas estratificadas (+10,1 pontos percentuais / +27,2 pontos percentuais / +0,041 em relação à versão base qwen3:8b). Marcado como `cs-actions-v1`; o relatório de avaliação está anexado à [versão do GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) como um arquivo único para download. **Limitação documentada da versão 1:** viés anti-"desconhecido" (precisão de 1,000 / revocação de 0,286) — o modelo classifica incorretamente entradas ambíguas. Consulte o [manual → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md). |
94
96
 
95
97
  Roteiro para a versão 0.8+: acompanhado em [URGENT_FINDINGS.md](URGENT_FINDINGS.md) e nas issues.
96
98
 
@@ -289,12 +291,43 @@ Estratégias de busca: `gh-releases | rss | raw-changelog | html-scrape | catalo
289
291
 
290
292
  ---
291
293
 
294
+ ## Conjuntos de dados e modelos ajustados
295
+
296
+ O conjunto de dados possui uma camada de aplicação: **conjuntos de dados** selecionados derivados de descrições de alterações e **modelos ajustados** treinados nesses conjuntos de dados. O conjunto de dados é o artefato neste repositório; o modelo é a aplicação.
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 entradas
299
+
300
+ Cada entrada associa uma descrição de alteração do conjunto de dados a um item de ação escrito manualmente: `{kind, severity, subject, action_text, deadline, tags}`. Taxonomia de 8 categorias para "kind" (`breaking | deprecation | security | feature | fix | performance | docs | unknown`), divisão estratificada de 80/20 para treinamento/validação, revisado por humanos e por um modelo de referência qwen3:8b (92,4% de concordância). Consulte [`dataset/README.md`](dataset/README.md) para a tabela de distribuição, [`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) para o contrato de campo a campo e [`STYLE.md`](dataset/changelog-actions/STYLE.md) para as regras de escrita de `action_text`.
301
+
302
+ ### `cs-actions:v1` — sintetizador ajustado
303
+
304
+ Primeiro modelo treinado no conjunto de dados. Qwen2.5-7B-Instruct + LoRA (rank-256 / all-linear, 100 etapas de QLoRA em 242 entradas de treinamento), formato GGUF q8_0, implantado via Modelfile de duas etapas do Ollama (`cs-actions-base` + `cs-actions:v1`).
305
+
306
+ **Avaliação para lançamento** (59 entradas estratificadas, três execuções, todas aprovadas, sem erros de análise):
307
+
308
+ | Métrica | qwen3:8b base | cs-actions:v1 | Diferença |
309
+ |---|---|---|---|
310
+ | Precisão em "kind" vs. referência | 78.0% | **88.1%** | +10,1 pp |
311
+ | Precisão em "severity" vs. referência | 52.5% | **79.7%** | +27,2 pp |
312
+ | Macro-F1 (classes com muitos exemplos) | 0.801 | **0.854** | +0.053 |
313
+ | Execução 3 — ablação de "hint" (com "hint" / sem "hint") | — | 0.842 / 0.777 | 6,5 pontos → zona alvo |
314
+
315
+ Critério de aprovação para lançamento `qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0,780 ≥ 0,780`) — APROVADO ✓. Resultados detalhados para cada entrada em [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json), também anexado à [versão do GitHub](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1) como um arquivo único para download.
316
+
317
+ **Limitação documentada da versão 1 — viés anti-"desconhecido".** "desconhecido" é a única classe em que cs-actions:v1 tem desempenho inferior ao qwen3:8b (F1 de 0,444 vs 0,545). Precisão de 1,000 / revocação de 0,286 — quando a entrada é genuinamente ambígua, o modelo escolhe uma categoria específica em vez de abster-se. Herda o comportamento padrão da família qwen, que não foi totalmente substituído pelo LoRA. Os usuários devem tratar uma taxa de "kind: "desconhecido"" inferior ao esperado como um sinal para encaminhar lotes para revisão humana. O [plano da versão 2](dataset/README.md) aborda isso com a ampliação da classe "desconhecido" e a randomização de "hints".
318
+
319
+ **Não distribuído através deste repositório** — o arquivo GGUF q8_0 tem aproximadamente 5 GB e o checkpoint combinado tem aproximadamente 15 GB. O conjunto de dados e o processo de construção são o que está publicado; o modelo é reconstruído localmente, conforme descrito em [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) (processo manual em 4 etapas, leva cerca de 88 minutos para ser carregado em uma placa RTX 5080 para laptop com 16 GB de VRAM). O contrato de validação para a versão final está em [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md).
320
+
321
+ Um guia completo de uso — incluindo a invocação local via Ollama, a exigência de formatação "json" para cada requisição e o processo de reconstrução — está disponível na página do [manual → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/).
322
+
323
+ ---
324
+
292
325
  ## Testes
293
326
 
294
327
  O conjunto de testes Vitest cobre os níveis de unidade / integração / regressão / teste rápido. **[test-spec-3.md](test-spec-3.md) é a documentação atual** a partir da versão v0.7.0; [test-spec.md](test-spec.md) (v1) e [test-spec-2.md](test-spec-2.md) (v2) permanecem no repositório como registro histórico da linhagem do design.
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
package/README.zh.md CHANGED
@@ -73,7 +73,7 @@ claude-synergy/
73
73
  └── URGENT_FINDINGS.md # 23 actionable items surfaced from the corpus
74
74
  ```
75
75
 
76
- **实时数据 (截至 v1.2.0 版本):** 44 个产品 / 1,171 个发布文件 / 6,573 个变更 / 1,260 个实体 / 12 个协同功能 / 517 个测试 / 13 个 MCP 工具 / 17 个 CLI 命令。 (语料库已于 2026-05-24 通过 `sync_now` 命令刷新。)
76
+ **实时数据(截至 v1.2.1 版本):** 44 个产品 / 1,171 个发布文件 / 6,573 个变更 / 1,260 个实体 / 12 个协同项目 / 519 个测试 / 13 个 MCP 工具 / 17 个 CLI 命令。(语料库已于 2026-05-24 通过 `sync_now` 命令刷新。)
77
77
 
78
78
  ---
79
79
 
@@ -91,6 +91,8 @@ claude-synergy/
91
91
  | 4d — playwright + MCP 注册 + YAML 配置文件。 | ✅ 已发货。 | 使用 Playwright 进行网页抓取;Smithery + 官方 MCP 注册信息作为第四级目录;产品信息已整合到 `products.yaml` 文件中。 |
92
92
  | **5 — v1.1 版本:窗口浏览 + OpenAI 嵌入** | ✅ 已发货。 | `hk diff` / `hk breaking`,所有浏览命令都支持日期范围;3 个新的 MCP 工具 (总共 11 个);OpenAI 嵌入提供程序;可配置的嵌入维度;`claude-code` 自动同步;通用的 `keep-a-changelog` 解析器。 |
93
93
  | **6 — v1.2 版本:从 MCP 同步** | ✅ 已发货。 | `sync_status` (报告每个产品的更新状态,检测是否过时) 和 `sync_now` (按需获取 → 导入 → 嵌入,并提供 `dry_run` 预览 + 进程内并发锁定)。 解决了调用方可以查询语料库,但无法刷新的问题。 **此外,还修复了:** 标记清除错误,即 `INSERT OR REPLACE INTO products` 会级联删除 `markers` 上的外键,从而在每次导入时静默地重置每个产品的 `since` 游标 (回归 §8.20)。 |
94
+ | **6.1 — v1.2.1:fetcher-marker 集中化** | ✅ 已发货。 | 将 `writeMarker` 函数集中到 `fetchOne` 函数中,以便每次成功的获取都更新标记。之前,某些策略(特别是 `aider` 的原始变更日志)在窗口期内没有返回任何条目,因此从未写入标记,并且每次同步都会重新拉取 `HISTORY.md` 文件。将未实现的 `webfetch` 策略重命名为 `manual`,用于 `claude-api` + `anthropic-apps`;现在,`sync_status` 将手动产品显示为 "manual",而不是 "never",并且将其排除在 `stale_only` 之外(回归 §8.21)。 |
95
+ | **7 — v1.3:cs-actions:v1:微调的合成器** | ✅ 已发货。 | 第一个基于语料库训练的下游模型。将一条变更日志条目转换为一个严格的 JSON 格式的操作项:`{kind, severity, subject, action_text, deadline, tags}`。使用 Qwen2.5-7B + LoRA,基于 `dataset/changelog-actions/v1/` 中的 242 个条目进行训练,使用 q8_0 GGUF 格式,并通过 Ollama 部署。发布前评估:**kind 类别准确率 88.1% / severity 严重程度准确率 79.7% / macro-F1 值为 0.842**,与 59 个分层验证集中的真实值相比(相对于 qwen3:8b 基础模型,分别提高了 +10.1pp / +27.2pp / +0.041)。已标记为 `cs-actions-v1`;评估报告已附加到 [GitHub 发布页面](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1),以单个文件的形式下载。**记录了 v1 版本的限制:**存在对 "unknown" 类型的偏见(精确率 1.000 / 召回率 0.286)——模型会低估不明确的输入。请参阅 [手册 → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) + [`dataset/README.md`](dataset/README.md) + [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md) + [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md)。 |
94
96
 
95
97
  v0.8 及后续版本的开发计划,请参考 [URGENT_FINDINGS.md](URGENT_FINDINGS.md) 文件以及相关问题列表。
96
98
 
@@ -289,12 +291,43 @@ v1.1 版本的工具模仿了 `hk diff` / `hk breaking` 命令,以及以前需
289
291
 
290
292
  ---
291
293
 
294
+ ## 数据集和微调模型
295
+
296
+ 语料库包含一个下游层:从变更条目中提取的**数据集**,以及基于这些数据集训练的**微调模型**。数据集是此仓库中的文件,而模型是下游应用。
297
+
298
+ ### `dataset/changelog-actions/v1` — 301 个条目
299
+
300
+ 每个条目将语料库中的一条变更条目与人工编写的操作项配对:`{kind, severity, subject, action_text, deadline, tags}`。`kind` 类别采用 8 种枚举类型(`breaking | deprecation | security | feature | fix | performance | docs | unknown`),采用 80/20 的分层训练/验证集划分,由人工和跨家族的 qwen3:8b 评委进行 A3c 审查(一致性为 92.4%)。请参阅 [`dataset/README.md`](dataset/README.md) 以获取分布表,[`SCHEMA.md`](dataset/changelog-actions/SCHEMA.md) 以获取字段级别的说明,以及 [`STYLE.md`](dataset/changelog-actions/STYLE.md) 以获取 `action_text` 编写规则。
301
+
302
+ ### `cs-actions:v1` — 微调的合成器
303
+
304
+ 第一个基于数据集训练的模型。使用 Qwen2.5-7B-Instruct + LoRA(rank-256 / all-linear,使用 QLoRA 方法在 242 个训练条目上进行 100 步训练),使用 q8_0 GGUF 格式,并通过双阶段的 Ollama Modelfile 部署(`cs-actions-base` + `cs-actions:v1`)。
305
+
306
+ **发布前评估**(59 个分层验证集,三次运行,均通过,无解析错误):
307
+
308
+ | 指标 | qwen3:8b 基础模型 | cs-actions:v1 | 增量 |
309
+ |---|---|---|---|
310
+ | 与真实值相比的 kind 类别准确率 | 78.0% | **88.1%** | +10.1pp |
311
+ | 与真实值相比的 severity 严重程度准确率 | 52.5% | **79.7%** | +27.2pp |
312
+ | Macro-F1 (类别分布均衡) | 0.801 | **0.854** | +0.053 |
313
+ | 第三次运行 — 移除 hint 的实验 (带 hint / 不带 hint) | — | 0.842 / 0.777 | 6.5pt → 目标区域 |
314
+
315
+ 发布通过标准:`qwen3-vs-cs-actions ≥ qwen3-vs-GT` (`0.780 ≥ 0.780`) — 通过 ✓。每个条目的详细评估结果位于 [`eval-report.v1.json`](dataset/changelog-actions/v1/eval-report.v1.json),也已附加到 [GitHub 发布页面](https://github.com/mcp-tool-shop-org/claude-synergy/releases/tag/cs-actions-v1),以单个文件的形式下载。
316
+
317
+ **已记录的 v1 版本限制 — 对“未知”类别的偏见。** “未知”是唯一一个在 cs-actions:v1 中表现不如 qwen3:8b 的类别(F1 分数:0.444 vs 0.545)。 准确率 1.000 / 召回率 0.286 — 当输入确实存在歧义时,模型会倾向于选择一种特定的类别,而不是选择“未知”。 该模型继承了 qwen 系列的先验知识,但 LoRA 并没有完全覆盖。下游应用应该将低于预期“kind: "unknown"”的出现率视为一个信号,用于将批次发送到人工审核。 [v2 计划](dataset/README.md) 通过增加“未知”类别的样本以及提示随机化来解决这个问题。
318
+
319
+ **未通过此仓库分发** — q8_0 GGUF 文件约为 5 GB,合并后的检查点文件约为 15 GB。 发布的是数据集和构建流水线;模型需要在本地进行重建,具体步骤请参考 [`TRAINING.md`](dataset/changelog-actions/v1/TRAINING.md)(包含 4 个手动步骤,在 RTX 5080 笔记本电脑上,16 GB 显存,需要约 88 分钟的预热)。 三次运行的发布流程规范位于 [`EVAL.md`](dataset/changelog-actions/v1/EVAL.md)。
320
+
321
+ 完整的用法指南 — 包括本地 Ollama 调用、每个请求的 `format: "json"` 格式要求以及重建流水线 — 可以在 [手册 → cs-actions:v1](https://mcp-tool-shop-org.github.io/claude-synergy/handbook/cs-actions-v1/) 页面上找到。
322
+
323
+ ---
324
+
292
325
  ## 测试
293
326
 
294
327
  Vitest 测试套件覆盖单元测试、集成测试、回归测试和初步测试。 **[test-spec-3.md](test-spec-3.md) 是当前版本 (v0.7.0) 的权威文档**;[test-spec.md](test-spec.md) (v1) 和 [test-spec-2.md](test-spec-2.md) (v2) 仍然保存在代码库中,作为设计演进的历史记录。
295
328
 
296
329
  ```bash
297
- pnpm test # unit + integration + regression (~36s, 517 tests)
330
+ pnpm test # unit + integration + regression (~36s, 519 tests)
298
331
  pnpm test:watch # interactive
299
332
  pnpm test:coverage # generate coverage/index.html (thresholds: 78/75/85/78)
300
333
  pnpm test:smoke # opt-in full-corpus smoke (RUN_SMOKE=1)
@@ -123,7 +123,9 @@ function getSyncStatus(db, opts = {}) {
123
123
  const rows = db.prepare(sql).all(params);
124
124
  if (opts.staleOnly) {
125
125
  const cutoff = opts.staleHours ?? 24;
126
- return rows.filter((r) => r.hours_since_fetch === null || r.hours_since_fetch > cutoff);
126
+ return rows.filter(
127
+ (r) => r.fetch_strategy !== "manual" && (r.hours_since_fetch === null || r.hours_since_fetch > cutoff)
128
+ );
127
129
  }
128
130
  return rows;
129
131
  }
@@ -791,23 +791,31 @@ function buildSummary(results) {
791
791
  }
792
792
  async function fetchOne(db, productsRoot, target, sinceOverride, signal) {
793
793
  assertProductShape(target.product);
794
- const since = sinceOverride ?? readMarker(db, target.product) ?? "2026-01-01";
794
+ const existingMarker = readMarker(db, target.product);
795
+ const since = sinceOverride ?? existingMarker ?? "2026-01-01";
795
796
  const outDir = resolve(productsRoot, target.product, "releases");
796
797
  mkdirSync2(outDir, { recursive: true });
798
+ let stats;
797
799
  try {
798
800
  switch (target.strategy) {
799
801
  case "gh-releases":
800
- return await fetchGhReleases(db, outDir, target, since);
802
+ stats = await fetchGhReleases(db, outDir, target, since);
803
+ break;
801
804
  case "rss":
802
- return await fetchRss(db, outDir, target, since, signal);
805
+ stats = await fetchRss(db, outDir, target, since, signal);
806
+ break;
803
807
  case "raw-changelog":
804
- return await fetchRawChangelog(db, outDir, target, since, signal);
808
+ stats = await fetchRawChangelog(db, outDir, target, since, signal);
809
+ break;
805
810
  case "html-scrape":
806
- return await fetchHtmlScrape(db, outDir, target, since, signal);
811
+ stats = await fetchHtmlScrape(db, outDir, target, since, signal);
812
+ break;
807
813
  case "catalog":
808
- return await fetchCatalogStrategy(db, productsRoot, target, since, signal);
814
+ stats = await fetchCatalogStrategy(db, productsRoot, target, since, signal);
815
+ break;
809
816
  case "playwright":
810
- return await fetchPlaywrightStrategy(db, outDir, target, since);
817
+ stats = await fetchPlaywrightStrategy(db, outDir, target, since);
818
+ break;
811
819
  }
812
820
  } catch (e) {
813
821
  return {
@@ -818,6 +826,9 @@ async function fetchOne(db, productsRoot, target, sinceOverride, signal) {
818
826
  errors: [`fetch failed: ${e.message}`]
819
827
  };
820
828
  }
829
+ const markerVersion = stats.latest ?? existingMarker ?? since;
830
+ writeMarker(db, target.product, markerVersion, target.strategy);
831
+ return stats;
821
832
  }
822
833
  async function fetchGhReleases(db, outDir, target, since) {
823
834
  if (!target.repo) throw new Error(`${target.product}: gh-releases strategy requires repo`);
@@ -845,7 +856,6 @@ async function fetchGhReleases(db, outDir, target, since) {
845
856
  errors.push(`${r.tag_name}: ${e.message}`);
846
857
  }
847
858
  }
848
- if (latest) writeMarker(db, target.product, latest, target.strategy);
849
859
  return { product: target.product, fetched, newSince: since, latest, errors };
850
860
  }
851
861
  function ghReleases(repo, sinceIso) {
@@ -959,7 +969,6 @@ async function fetchRss(db, outDir, target, since, signal) {
959
969
  errors.push(`${item.slug}: ${e.message}`);
960
970
  }
961
971
  }
962
- if (latest) writeMarker(db, target.product, latest, target.strategy);
963
972
  return { product: target.product, fetched, newSince: since, latest, errors };
964
973
  }
965
974
  async function fetchRawChangelog(db, outDir, target, since, signal) {
@@ -1008,7 +1017,6 @@ async function fetchRawChangelog(db, outDir, target, since, signal) {
1008
1017
  errors.push(`${item.version}: ${e.message}`);
1009
1018
  }
1010
1019
  }
1011
- if (latest) writeMarker(db, target.product, latest, target.strategy);
1012
1020
  return { product: target.product, fetched, newSince: since, latest, errors };
1013
1021
  }
1014
1022
  async function fetchHtmlScrape(db, outDir, target, since, signal) {
@@ -1048,7 +1056,6 @@ async function fetchHtmlScrape(db, outDir, target, since, signal) {
1048
1056
  errors.push(`${item.slug}: ${e.message}`);
1049
1057
  }
1050
1058
  }
1051
- if (latest) writeMarker(db, target.product, latest, target.strategy);
1052
1059
  return { product: target.product, fetched, newSince: since, latest, errors };
1053
1060
  }
1054
1061
  async function fetchPlaywrightStrategy(db, outDir, target, since) {
@@ -1088,7 +1095,6 @@ async function fetchPlaywrightStrategy(db, outDir, target, since) {
1088
1095
  errors.push(`${item.slug}: ${e.message}`);
1089
1096
  }
1090
1097
  }
1091
- if (latest) writeMarker(db, target.product, latest, target.strategy);
1092
1098
  return { product: target.product, fetched, newSince: since, latest, errors };
1093
1099
  }
1094
1100
  async function fetchCatalogStrategy(db, productsRoot, target, since, signal) {
@@ -1097,7 +1103,6 @@ async function fetchCatalogStrategy(db, productsRoot, target, since, signal) {
1097
1103
  const productDir = resolve(productsRoot, target.product);
1098
1104
  writeCatalog(productDir, target.product, entries);
1099
1105
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
1100
- writeMarker(db, target.product, nowIso, target.strategy);
1101
1106
  return {
1102
1107
  product: target.product,
1103
1108
  fetched: entries.length,
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  lookupEntity,
9
9
  recentReleases,
10
10
  searchChanges
11
- } from "./chunk-MTW6UZBF.js";
11
+ } from "./chunk-2J45LIMO.js";
12
12
  import {
13
13
  ingestAll
14
14
  } from "./chunk-KFAQPOGV.js";
@@ -22,7 +22,7 @@ import {
22
22
  import {
23
23
  fetchAll,
24
24
  seedMarkersFromDb
25
- } from "./chunk-X25ZTSCJ.js";
25
+ } from "./chunk-6MUY565T.js";
26
26
  import "./chunk-MZLFGICO.js";
27
27
 
28
28
  // src/cli.ts
@@ -2,7 +2,7 @@ import {
2
2
  fetchAll,
3
3
  listFetchTargets,
4
4
  seedMarkersFromDb
5
- } from "./chunk-X25ZTSCJ.js";
5
+ } from "./chunk-6MUY565T.js";
6
6
  import "./chunk-MZLFGICO.js";
7
7
  export {
8
8
  fetchAll,
@@ -12,7 +12,7 @@ import {
12
12
  lookupEntity,
13
13
  recentReleases,
14
14
  searchChanges
15
- } from "./chunk-MTW6UZBF.js";
15
+ } from "./chunk-2J45LIMO.js";
16
16
  import {
17
17
  openDb
18
18
  } from "./chunk-CEIOLMDT.js";
@@ -781,14 +781,15 @@ function handleSyncStatus(args) {
781
781
  return args.staleOnly ? `(no stale products \u2014 threshold ${args.staleHours ?? 24}h)` : "(no products in DB \u2014 run `hk ingest` first)";
782
782
  }
783
783
  const lines = [
784
- "Product Strategy Last fetch Hours Ingested Latest release",
785
- "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
784
+ "Product Strategy Last fetch Hours Ingested Latest release",
785
+ "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"
786
786
  ];
787
787
  for (const r of rows) {
788
+ const isManual = r.fetch_strategy === "manual";
788
789
  const product = (r.product ?? "").padEnd(36);
789
790
  const strategy = (r.fetch_strategy ?? "\u2014").padEnd(14);
790
- const lastFetch = r.last_fetch_attempt ? r.last_fetch_attempt.split("T")[0] : "never ";
791
- const hours = formatHours(r.hours_since_fetch).padStart(5);
791
+ const lastFetch = r.last_fetch_attempt ? r.last_fetch_attempt.split("T")[0] : isManual ? "manual " : "never ";
792
+ const hours = (isManual && r.hours_since_fetch == null ? "manual" : formatHours(r.hours_since_fetch)).padStart(6);
792
793
  const ingested = String(r.releases_ingested).padStart(8);
793
794
  const latest = r.last_release_at ? r.last_release_at.split("T")[0] : "\u2014";
794
795
  lines.push(`${product} ${strategy} ${lastFetch} ${hours} ${ingested} ${latest}`);
@@ -809,7 +810,7 @@ async function handleSyncNow(args) {
809
810
  const includeIngest = args.includeIngest ?? true;
810
811
  const includeEmbed = args.includeEmbed ?? true;
811
812
  const timeoutMs = args.timeoutMs ?? 3e5;
812
- const { fetchAll, listFetchTargets } = await import("./fetch-XS3IETWW.js");
813
+ const { fetchAll, listFetchTargets } = await import("./fetch-CRO7KXFP.js");
813
814
  if (dryRun) {
814
815
  const targets = args.product ? listFetchTargets().filter((t) => t.product === args.product) : listFetchTargets();
815
816
  if (targets.length === 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcptoolshop/claude-synergy",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Local mirror of Anthropic product changelogs + curated cross-product synergies. So the LLM agent inside the harness knows what the harness can do.",
5
5
  "type": "module",
6
6
  "exports": {
package/products.yaml CHANGED
@@ -77,19 +77,24 @@ products:
77
77
  type: gh-releases
78
78
  repo: anthropics/claude-code
79
79
 
80
- # ── Tier 3 / HTML feeds ──────────────────────────────────────────────────
80
+ # ── Tier 3 / manual-seed (no automated fetcher yet) ──────────────────────
81
+ # Renamed from `webfetch` to `manual` in v1.2.1 — the original label suggested
82
+ # an automated WebFetch-based fetcher that was never implemented. These two
83
+ # corpora are still seeded by hand (the initial study-swarm pulled them via
84
+ # WebFetch one-shot, but `sync_now` does not refresh them). `sync_status`
85
+ # renders the strategy as "manual" instead of "never" so callers can
86
+ # distinguish "needs implementation" from "stale gh-releases."
81
87
  - name: claude-api
82
88
  display_name: Claude API / Platform
83
89
  tier: 3
84
90
  source_url: https://platform.claude.com/docs/en/release-notes/overview
85
- fetch_strategy: webfetch
86
- # WebFetch-based; corpus seeded by initial swarm.
91
+ fetch_strategy: manual
87
92
 
88
93
  - name: anthropic-apps
89
94
  display_name: Anthropic Apps (Design / Cowork / Chat / Mobile)
90
95
  tier: 3
91
96
  source_url: https://support.claude.com/en/articles/12138966-release-notes
92
- fetch_strategy: webfetch
97
+ fetch_strategy: manual
93
98
 
94
99
  # ── Tier 1 / GitHub Releases — Anthropic SDKs ────────────────────────────
95
100
  - name: claude-agent-sdk-python