abb7964214
- 08-01 (W1): HytaleRecentArticles.vue scaffold + injection hytale.vue + i18n - 08-02 (W2): article tutorial how-to-build-your-first-hytale-plugin FR+EN - 08-03 (W2): article positionnement hytale-plugin-development-2026 FR+EN Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
304 lines
13 KiB
Markdown
304 lines
13 KiB
Markdown
---
|
||
phase: 08-content-cocon-semantique
|
||
plan: 03
|
||
type: execute
|
||
wave: 2
|
||
depends_on: ["08-01"]
|
||
files_modified:
|
||
- content/fr/blog/hytale-plugin-development-2026.md
|
||
- content/en/blog/hytale-plugin-development-2026.md
|
||
autonomous: true
|
||
requirements: [BLOG-07, SEO-14]
|
||
tags: [content, blog, hytale, industry, analysis]
|
||
|
||
must_haves:
|
||
truths:
|
||
- "Article 'hytale-plugin-development-2026' publié (draft: false) en FR et EN avec le même slug"
|
||
- "Chaque version contient au moins 1 bloc code Kotlin réaliste (pattern moderne 2026)"
|
||
- "Version FR contient au moins 1 lien markdown inline vers /hytale ; version EN vers /en/hytale"
|
||
- "Frontmatter Zod-valide : tags incluent 'hytale', draft: false, date ISO"
|
||
- "Article apparaît dans /blog (FR) et /en/blog (EN), et dans la section 'Articles récents' de /hytale (aux côtés de l'article 08-02)"
|
||
artifacts:
|
||
- path: "content/fr/blog/hytale-plugin-development-2026.md"
|
||
provides: "Article FR positionnement/autorité — état de l'art Hytale 2026 (800-1500 mots)"
|
||
contains: "draft: false"
|
||
- path: "content/en/blog/hytale-plugin-development-2026.md"
|
||
provides: "Article EN équivalent, même slug"
|
||
contains: "draft: false"
|
||
key_links:
|
||
- from: "content/fr/blog/hytale-plugin-development-2026.md"
|
||
to: "/hytale"
|
||
via: "lien markdown inline"
|
||
pattern: "\\]\\(/hytale\\)"
|
||
- from: "content/en/blog/hytale-plugin-development-2026.md"
|
||
to: "/en/hytale"
|
||
via: "lien markdown inline"
|
||
pattern: "\\]\\(/en/hytale\\)"
|
||
---
|
||
|
||
<objective>
|
||
Publier l'article seed 2 "Hytale plugin development in 2026" en FR et EN. Article de positionnement/autorité : état de l'art 2026, stack, outlook, tendances. 800-1500 mots, 1 bloc code Kotlin moderne (ex: coroutines pour event async), 1-2 liens inline vers `/hytale`.
|
||
|
||
Purpose: 2e pilier du cocon sémantique. Capte le trafic info long-tail ("Hytale plugin 2026", "Hytale API state"). Complément du tutorial (08-02) : l'un convertit, l'autre asseoit l'autorité.
|
||
|
||
Output: 2 fichiers markdown (FR + EN), même slug, tags `['hytale', 'industry', 'analysis']`, publiés.
|
||
</objective>
|
||
|
||
<execution_context>
|
||
@$HOME/.claude/get-shit-done/workflows/execute-plan.md
|
||
@$HOME/.claude/get-shit-done/templates/summary.md
|
||
</execution_context>
|
||
|
||
<context>
|
||
@.planning/PROJECT.md
|
||
@.planning/ROADMAP.md
|
||
@.planning/phases/08-content-cocon-semantique/08-CONTEXT.md
|
||
@.planning/phases/08-content-cocon-semantique/08-PATTERNS.md
|
||
@content/fr/blog/test-kotlin-syntax.md
|
||
</context>
|
||
|
||
<editorial_brief>
|
||
|
||
**Slug :** `hytale-plugin-development-2026` — identique FR+EN.
|
||
|
||
**Titre FR :** "Développement de plugins Hytale en 2026 : état de l'art et perspectives"
|
||
**Titre EN :** "Hytale plugin development in 2026: state of the art and outlook"
|
||
|
||
**Description FR :** "Tour d'horizon de l'écosystème plugin Hytale en 2026 : stack technique, patterns modernes, et ce qui attend la communauté."
|
||
**Description EN :** "A 2026 snapshot of the Hytale plugin ecosystem: tech stack, modern patterns, and what's next for the community."
|
||
|
||
**Tags :** `["hytale", "industry", "analysis"]` (D-15)
|
||
**Date :** `"2026-04-22"`
|
||
**Draft :** `false`
|
||
**Image :** omis (fallback applicable)
|
||
**Champ `updated` :** omis
|
||
|
||
**Ton :** première personne, analytique mais sans être sec. Perspective praticien ("ce que j'ai observé", "ce qui tourne en prod").
|
||
|
||
**Longueur :** 1000-1400 mots.
|
||
|
||
**Outline recommandé (6 sections) :**
|
||
|
||
1. **Intro — Hytale en 2026, où en est-on ?** (~200 mots)
|
||
- Contexte sortie + maturité SDK.
|
||
- Qui code pour Hytale aujourd'hui : indie, serveurs communautaires, devs commerciaux.
|
||
- Thèse de l'article : le paysage plugin s'est professionnalisé, voici ce qui change.
|
||
- **Placement 1er lien `/hytale`** : "Je développe moi-même [des plugins Hytale sur commande](/hytale) depuis les premières betas, et le paysage a radicalement changé." (FR) / "I've been building [Hytale plugins on commission](/en/hytale) since the early betas, and the landscape has shifted dramatically." (EN)
|
||
|
||
2. **La stack 2026 : Kotlin, coroutines, et outillage mature** (~250 mots)
|
||
- Kotlin reste la lingua franca ; Java résiduel.
|
||
- Gradle Kotlin DSL standard.
|
||
- IDE support (IntelliJ IDEA Ultimate recommandé).
|
||
- Testing : JUnit 5 + MockK pour plugins.
|
||
- **Bloc code Kotlin moderne obligatoire ici — coroutines pour event async :**
|
||
```kotlin
|
||
package com.example.ecoplugin
|
||
|
||
import io.hytale.api.HytalePlugin
|
||
import io.hytale.api.event.EventHandler
|
||
import io.hytale.api.event.player.PlayerJoinEvent
|
||
import kotlinx.coroutines.CoroutineScope
|
||
import kotlinx.coroutines.Dispatchers
|
||
import kotlinx.coroutines.launch
|
||
|
||
class EcoPlugin : HytalePlugin() {
|
||
private val scope = CoroutineScope(Dispatchers.IO)
|
||
|
||
@EventHandler
|
||
fun onJoin(event: PlayerJoinEvent) {
|
||
scope.launch {
|
||
val profile = profileRepo.fetch(event.player.uuid)
|
||
event.player.sendMessage("Welcome back, balance: ${profile.balance}")
|
||
}
|
||
}
|
||
}
|
||
```
|
||
- Expliquer : pourquoi coroutines (non-blocking I/O), scope lifecycle, dispatcher choice.
|
||
|
||
3. **Patterns modernes — ce qui a remplacé les mauvaises habitudes Bukkit-era** (~250 mots)
|
||
- Dependency injection (Koin / manual constructor injection).
|
||
- Event handlers séparés de la logique métier.
|
||
- Config typée (kotlinx.serialization).
|
||
- Tests unitaires sur la logique, intégration sur les handlers.
|
||
|
||
4. **Écosystème — libs et SDKs qui comptent** (~200 mots)
|
||
- SDK officiel Hytale.
|
||
- Communauté : hubs GitHub actifs, Discord devs.
|
||
- Anti-patterns à éviter (sans nommer de projets précis pour éviter les affirmations fragiles).
|
||
|
||
5. **Ce que l'avenir apporte** (~200 mots)
|
||
- Scripting côté client (si annoncé / spéculation cadrée).
|
||
- Packaging formats évolutifs.
|
||
- Monétisation indie : modèles commission, rev-share.
|
||
- **Placement 2e lien `/hytale`** : "Si tu veux externaliser le dev d'un plugin ambitieux, je propose [du développement Hytale sur commande](/hytale) — configs et patterns modernes inclus." (FR)
|
||
|
||
6. **Conclusion** (~150 mots)
|
||
- 2026 = l'année où le dev Hytale devient un vrai métier, pas juste un hobby.
|
||
|
||
**Liens internes (D-08, D-09) :**
|
||
- FR : ≥1 lien `](/hytale)`, idéalement 2.
|
||
- EN : ≥1 lien `](/en/hytale)`, idéalement 2.
|
||
- Paths hardcoded, pas `localePath()`.
|
||
|
||
**Bloc code Kotlin :** au moins 1 bloc réaliste (exemple coroutines ci-dessus satisfait). Imports kotlinx.coroutines cohérents. Pas pseudo-code.
|
||
|
||
**Frontmatter exact FR :**
|
||
```yaml
|
||
---
|
||
title: "Développement de plugins Hytale en 2026 : état de l'art et perspectives"
|
||
description: "Tour d'horizon de l'écosystème plugin Hytale en 2026 : stack technique, patterns modernes, et ce qui attend la communauté."
|
||
date: "2026-04-22"
|
||
tags: ["hytale", "industry", "analysis"]
|
||
draft: false
|
||
---
|
||
```
|
||
|
||
**Frontmatter exact EN :**
|
||
```yaml
|
||
---
|
||
title: "Hytale plugin development in 2026: state of the art and outlook"
|
||
description: "A 2026 snapshot of the Hytale plugin ecosystem: tech stack, modern patterns, and what's next for the community."
|
||
date: "2026-04-22"
|
||
tags: ["hytale", "industry", "analysis"]
|
||
draft: false
|
||
---
|
||
```
|
||
|
||
**Précision importante :** comme l'article fait des claims sur l'état de l'industrie en 2026, l'executor DOIT formuler les affirmations de manière défendable (éviter les chiffres inventés, éviter de nommer des projets tiers de manière non-vérifiée). Préférer "ce que j'observe", "ce qui tourne chez mes clients", "la tendance que je constate".
|
||
|
||
</editorial_brief>
|
||
|
||
<tasks>
|
||
|
||
<task type="auto">
|
||
<name>Task 1: Rédiger version FR de l'article positionnement 2026</name>
|
||
<files>content/fr/blog/hytale-plugin-development-2026.md</files>
|
||
<read_first>
|
||
- content/fr/blog/test-kotlin-syntax.md (pattern frontmatter + code block)
|
||
- .planning/phases/08-content-cocon-semantique/08-CONTEXT.md §D-02, D-04, D-05, D-07, D-08, D-15
|
||
- .planning/phases/08-content-cocon-semantique/08-PATTERNS.md §"content/{fr,en}/blog/..."
|
||
- Section `<editorial_brief>` ci-dessus
|
||
</read_first>
|
||
<action>
|
||
Créer `content/fr/blog/hytale-plugin-development-2026.md`.
|
||
|
||
**Frontmatter exact** (copier depuis `<editorial_brief>`) — draft: false, tags `["hytale", "industry", "analysis"]`.
|
||
|
||
**Corps** : suivre l'outline 6 sections, 1000-1400 mots, ton analytique praticien première personne.
|
||
|
||
**Exigences dures :**
|
||
1. Au moins 1 bloc ```kotlin avec imports cohérents (coroutines + event handler). Exemple exact dans le brief §section 2.
|
||
2. Au moins 1 lien `](/hytale)` inline. Idéalement 2 (intro + section 5).
|
||
3. Pas de champ `image:`. Pas de `updated:`.
|
||
4. Frontmatter Zod-valide.
|
||
|
||
**Interdits :**
|
||
- Affirmations numériques inventées ("Xk plugins publiés") — utiliser formulations qualitatives.
|
||
- Noms de projets tiers non-vérifiés.
|
||
- Pseudo-code.
|
||
- `localePath()` / `<NuxtLink>` dans markdown.
|
||
- Liens absolus (préférer `/hytale` relatif).
|
||
|
||
**Style :**
|
||
- Titres `##` pour les 6 sections.
|
||
- Callouts optionnels (`::alert{type="info"}` pour nuances/disclaimers).
|
||
- Code inline pour noms de libs/classes.
|
||
</action>
|
||
<verify>
|
||
<automated>pnpm typecheck</automated>
|
||
</verify>
|
||
<done>
|
||
- `test -f content/fr/blog/hytale-plugin-development-2026.md`
|
||
- `grep "draft: false" content/fr/blog/hytale-plugin-development-2026.md` passe
|
||
- `grep -E "industry" content/fr/blog/hytale-plugin-development-2026.md` trouve le tag
|
||
- `grep -c '\](/hytale)' content/fr/blog/hytale-plugin-development-2026.md` ≥ 1
|
||
- `grep -c '```kotlin' content/fr/blog/hytale-plugin-development-2026.md` ≥ 1
|
||
- `wc -w content/fr/blog/hytale-plugin-development-2026.md` ≥ 800
|
||
- `pnpm typecheck` exit 0
|
||
</done>
|
||
</task>
|
||
|
||
<task type="auto">
|
||
<name>Task 2: Rédiger version EN de l'article positionnement 2026</name>
|
||
<files>content/en/blog/hytale-plugin-development-2026.md</files>
|
||
<read_first>
|
||
- content/fr/blog/hytale-plugin-development-2026.md (juste créé — référence équivalence)
|
||
- content/en/blog/test-kotlin-syntax.md (pattern EN)
|
||
- .planning/phases/08-content-cocon-semantique/08-CONTEXT.md §D-03, D-08, D-09
|
||
</read_first>
|
||
<action>
|
||
Créer `content/en/blog/hytale-plugin-development-2026.md` — même slug, contenu équivalent adapté en anglais idiomatique (pas traduction littérale).
|
||
|
||
**Frontmatter exact** :
|
||
```yaml
|
||
---
|
||
title: "Hytale plugin development in 2026: state of the art and outlook"
|
||
description: "A 2026 snapshot of the Hytale plugin ecosystem: tech stack, modern patterns, and what's next for the community."
|
||
date: "2026-04-22"
|
||
tags: ["hytale", "industry", "analysis"]
|
||
draft: false
|
||
---
|
||
```
|
||
|
||
**Corps :** 6 sections équivalentes, 1000-1400 mots.
|
||
|
||
**Règle critique liens (D-09) :**
|
||
- Version EN : `](/en/hytale)` — au moins 1, idéalement 2. JAMAIS `/hytale` sans préfixe.
|
||
|
||
**Bloc code Kotlin :** identique à la version FR (snippet coroutines — le code n'a pas à être traduit).
|
||
|
||
**Exigences et interdits identiques à Task 1.**
|
||
</action>
|
||
<verify>
|
||
<automated>pnpm typecheck</automated>
|
||
</verify>
|
||
<done>
|
||
- Fichier existe
|
||
- `grep "draft: false" content/en/blog/hytale-plugin-development-2026.md` passe
|
||
- `grep -c '\](/en/hytale)' content/en/blog/hytale-plugin-development-2026.md` ≥ 1
|
||
- `grep -c '```kotlin' content/en/blog/hytale-plugin-development-2026.md` ≥ 1
|
||
- `wc -w content/en/blog/hytale-plugin-development-2026.md` ≥ 800
|
||
- `pnpm typecheck` exit 0
|
||
- Run `pnpm dev` puis `curl http://localhost:3000/blog/hytale-plugin-development-2026` → 200 FR
|
||
- `curl http://localhost:3000/en/blog/hytale-plugin-development-2026` → 200 EN
|
||
- `curl http://localhost:3000/blog` contient les 2 articles (celui-ci + celui de 08-02) en FR
|
||
- `curl http://localhost:3000/hytale` contient la section "Articles récents" avec les 2 slugs
|
||
- `curl http://localhost:3000/sitemap.xml` (ou sitemaps indexés) contient les 2 URLs FR+EN du slug 2026 avec hreflang alternates (Phase 7-04 automatique)
|
||
</done>
|
||
</task>
|
||
|
||
</tasks>
|
||
|
||
<threat_model>
|
||
## Trust Boundaries
|
||
|
||
| Boundary | Description |
|
||
|----------|-------------|
|
||
| markdown author → Zod schema → SSR | Contenu statique, Zod-validé, aucun user input |
|
||
|
||
## STRIDE Threat Register
|
||
|
||
| Threat ID | Category | Component | Disposition | Mitigation Plan |
|
||
|-----------|----------|-----------|-------------|-----------------|
|
||
| T-08-07 | T (Tampering) | frontmatter YAML | mitigate | Schema Zod blog_fr/blog_en, typecheck gate |
|
||
| T-08-08 | R (Repudiation) | claims industrie 2026 | mitigate | Formulations qualitatives "ce que j'observe" plutôt que chiffres — évite affirmations non-sourcées |
|
||
| T-08-09 | I (Info Disclosure) | liens inline | accept | Paths publics |
|
||
</threat_model>
|
||
|
||
<verification>
|
||
- 2 articles passent typecheck
|
||
- `curl /blog` et `/en/blog` listent désormais **au moins 2 articles tagués hytale** au total (celui-ci + 08-02)
|
||
- Section "Articles récents" sur /hytale affiche 2 cards BlogCard compact
|
||
- Sitemap inclut les 4 URLs (2 slugs × 2 locales) avec hreflang
|
||
</verification>
|
||
|
||
<success_criteria>
|
||
- Article positionnement publié FR+EN
|
||
- Ensemble avec Plan 08-02 : le cocon sémantique est fermé (≥2 articles tagués hytale, bidirectionnels)
|
||
- Phase goal atteint : "Section 'Articles récents' affiche des cards réelles sur /hytale"
|
||
</success_criteria>
|
||
|
||
<output>
|
||
Après complétion, créer `.planning/phases/08-content-cocon-semantique/08-03-SUMMARY.md`.
|
||
</output>
|