volontariapp-meta-scripts
Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace.
- License 许可
- MIT
- 最近更新
- 2026-11-10
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- volontariapp-meta-scripts
- tags
- [ "meta-scripts" ]
- type
- Agent Skill
- paths
- [ "scripts/cli/**", "repos.json", "root.sh", "setup.sh", "setup.ps1", "scripts/install_apps.sh", "scripts/install_shell.sh" ]
- title
- Scripts et CLI du workspace meta
- status
- draft
- sources
- []
- verified
- [ { "at": "2026-10-28T23:02:11Z", "by": "claude-code/agent", "digest": "7ccf4a975dbb6730" }, { "at": "2026-10-28T23:02:36Z", "by": "claude-code/agent", "digest": "8344fa15702535bd" }, { "at": "2026-10-28T23:22:35Z", "by": "claude-code/agent", "digest": "36024be2906c9d79" }, { "at": "2026-10-28T23:28:57Z", "by": "claude-code/agent", "digest": "e69071f06e250c57" }, { "at": "2026-11-08T12:02:25Z", "by": "claude-code/agent", "digest": "ea72b1f09c875324" } ]
- generated
- { "at": "2026-10-28T22:38:27Z", "by": "claude-code/agent" }
- mesh_keys
- [ "meta-cli", "repos.json" ]
- description
- Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace.
02 资源文件 3
- 参考文档index.md537 B
- 参考文档log.md1.1 KB
- 参考文档references/lessons.md480 B
03 SKILL.md 正文
Scripts et CLI du workspace meta
Quand utiliser cette skill
Utiliser et faire evoluer la CLI Node de meta (setup, doctor, migrate, certs, repos, bump) et le manifeste repos.json, source unique des repos et unites du workspace. Entree : yarn meta <commande> ou ./root.sh <commande> (lanceur, sans menu).
Règles
repos.jsonest la seule liste de repos, d'unites demarrables, de profils, d'environnements et d'infra Docker. Ne jamais recopier une liste de repos dans un script : lireloadManifest()(scripts/cli/lib/manifest.mjs).yarn meta manifestverifie la coherence avec.gitignore.- Ajouter un microservice : declarer le repo et l'unite dans
repos.json(migrations,certs,order), puisyarn meta manifestetyarn test:cli. - La CLI n'a aucune dependance npm : Node >=
.node-version, modules ESM.mjsannotes en JSDoc (pas deany), testsnode:testdansscripts/cli/test/(yarn test:cli, glob obligatoire sous Node 24.2). - Bootstrap :
setup.sh(macOS, Linux, WSL2) etsetup.ps1(Windows 11, winget) garantissent Node et Yarn puis lancentmeta setup. Toute la logique vit dans la CLI, pas dans les bootstraps. setupest idempotent et s'arrete a la premiere erreur reelle (code retour non nul, aucun|| true). Etapes : apps et shell (terminal interactif seulement,--no-apps,--no-shell, ou--yesles retire), prerequis, clone HTTPS viagh auth setup-git(--sshpour SSH), dependances, certificats, infra Docker avec attente des health-checks, migrations, verification.- Certificats :
certsn'ecrase jamais des cles existantes sans--force(les paires doivent rester coherentes entre services). Generation parnode:crypto, pas d'openssl. - Infra locale :
updemarre uniquement les services deinfra.services(jamais les images GHCR des ms du compose deci-tools). sync-migrationscopiems-X/src/migrationsversnpm-packages/packages/domain-X/src/test/migrations(miroir avec suppression). Toujours--dry-rund'abord.--prcree branche, changeset, build, test, PR dansnpm-packages, puis s'arrete : regle STOP, aucun consommateur n'est touche avant la publication CI.bump(apres publication CI uniquement) ouvre une PR par consommateur ; il ne pousse jamais surmain.notify-pr <repo> <n>n'envoie le webhook Discord que si la PR est fusionnable et tous les checks verts, une seule fois par PR (logs/discord-notified.log).trace-flowgenere une page HTML Sankey (SVG statique) des flux entre services : un lien relie le service d'un span parent a celui de son enfant, valeur = traces distinctes, rouge si un span enfant est en erreur (scripts/cli/lib/trace-flow.mjs). Deux phases : (1) chercher les spans de saut asynchroneoperation_name:(Consumer OR Producer)et ne garder que les traces ou l'un d'eux a un parent (les taches planifiees commejob ranking.compute_user_rankingsont des racines isolees), (2) recuperer tous les spans de ces traces par lots (trace_id:(a OR b)). Lecture parPOST https://api.<site>/api/v2/spans/events/search, limite reelle mesuree : 5 requetes par minute (en-tetesx-ratelimit-*, la doc annoncait 300 par heure), geree par attente et nouvelle tentative ;--max-traces 100 --chunk 10coute 11 requetes. Ne pas exclureoperation_name:Internal: certains parents de sauts en font partie. Mode hors ligne :--input. Identifiants lus dans l'environnement du terminal, jamais ecrits :DD_TOKEN(Bearer), sinonDD_API_KEY+DD_APP_KEY, ou uneDD_API_KEYde prefixeddpautilisee en Bearer ; le secretdatadog-keysdu cluster ne contient que l'api-key.repos syncne fait jamais de stash silencieux : un repo sale est ignore (ou--autostash),pull --ff-onlyseulement.repos rebaseabandonne proprement en cas de conflit.- Zero emoji et zero tiret cadratin dans le code, les logs et les messages de commit.
Pièges verifies
- Les
@volontariapp/*sont publics sur npm (access: publicdansnpm-packages/.changeset/config.json) : aucune authentification de registre n'est requise au setup. - La route de sante de l'api-gateway est
/api/v1/health(verifie : 200 apresstart backend-core), pas/health. - Node <
.node-versionfait echouerdoctoret doncsetup(cas constate sur une machine en 24.2.0). clamdn'a pas d'image arm64 (Apple Silicon) :upechoue en bloc s'il est dans la liste principale. Il est donc dansinfra.optionalderepos.json, demarre en emulation amd64 (DOCKER_DEFAULT_PLATFORM) et son echec n'arrete pas le setup.- Ne jamais sauter
yarn installsous pretexte quenode_modulesexiste : celui dems-rankingetait incomplet (@volontariapp/domain-rankingabsent), Node remontait vers unnode_modulesperime a la racine demeta.setuplance donc toujoursyarn install(no-op si a jour). - Arreter
start:child.kill()ne tue pas les petits-enfants (yarn, nest, node) et laisse les ports occupes. Les unites sont lancees dans leur groupe de processus (spawnGroup) et arretees parkillTree. - Une migration renommee apres application (meme timestamp, autre nom) fait echouer
migratesur une base de dev existante (type ... already exists, casms-event:AddSagaStatus1780932284627en base,AddSagaStatusToEvent1780932284627dans le code). Une base vierge n'est pas concernee : les 7 services migrent proprement (verifie sur un Postgres jetable). Ne pas vider la base d'un developpeur pour contourner. - Les ports et conteneurs du compose sont fixes (
container_name) : une seule instance de l'infra par machine.
Références
Scripts
yarn test:cli: tests unitaires de la CLI.yarn meta manifest: validerepos.jsonet.gitignore.yarn meta doctor: prerequis de la machine.
04 同仓库更多 Skills
volontariapp-user-account-deletion
Suppression de compte en deux temps (PENDING_DELETION): requestDeletionWithUserDeleted, finalizeDeletion, fan-out de user.deleted vers les domaines et gather ws. A utiliser pour tout changement de domain-user touchant la suppression, le statut ou le cycle de vie d'un user.
volontariapp-proto-contract-evolution
Modifier un contrat Protobuf de proto-registry (champ, message, enum, RPC) sans casser la compatibilité wire, puis suivre la cascade proto-registry, PR automatique dans npm-packages, publication, consommateurs. À utiliser avant toute édition d'un .proto.
volontariapp-implement-async-event-flow
Guide pas-à-pas pour concevoir et implémenter un flux asynchrone complet (messaging -> outbox -> post-processors -> ws-service -> client).
research
Investigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.
prototype
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
grilling
Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.