Shared base #1

Open
Senrokai wants to merge 11 commits from shared-base into main
11 Commits
Author SHA1 Message Date
SenrokaiandClaude Opus 5.5 e1b764ca31 Test de bissection : 90 s de délai au lieu de 30
node / check (pull_request) Successful in 2m35s
CI / ci (pull_request) Successful in 2m35s
7,5 s sur un poste récent, mais autour de 30 s sur le runner Gitea du VPS, même
seul : il échouait une fois sur deux. Le calcul vérifié ne change pas.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 19:29:47 +02:00
SenrokaiandClaude Opus 5.5 6fee084d77 CI Gitea : sans e2e pour l'instant
node / check (pull_request) Successful in 2m21s
CI / ci (pull_request) Successful in 2m21s
Les tests de bout en bout rendent la carte 3D en logiciel sur ng serve : sur le
runner du VPS (2 CPU), 7 sur 17 dépassent leur délai. Lint, types, tests
unitaires et build restent vérifiés ; les e2e reviendront avec un runner plus
capable.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:48:16 +02:00
SenrokaiandClaude Opus 5.5 2965706b7e Test de texture : une assertion par classe au lieu de trois par octet
node / check (pull_request) Failing after 20m2s
CI / ci (pull_request) Failing after 20m2s
245 760 appels à expect() (10 classes × 8 192 octets × 3) dépassaient le délai de
5 s par défaut sur le runner Gitea (1,4 s ici) ; le test tombe à 11 ms. Même
vérification, même résultat.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 18:24:08 +02:00
SenrokaiandClaude Opus 5.5 243aa3bbce Renovate : base commune de l'organisation + couche Angular
node / check (pull_request) Failing after 1m53s
CI / ci (pull_request) Failing after 1m54s
renovate.json étend local>avalon-vanguard/renovate-config (planning du lundi
avant 6 h, outils de dev groupés, registre npm de Gitea pour @avalon-vanguard/*,
config partagée en PR à part) et sa couche :angular (@angular/* et angular-eslint
groupés, plafonds TypeScript 6.0 et Vitest 4). L'exécution est centrale
(avalon-vanguard/renovate) : aucun workflow renovate.yml dans ce dépôt.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:30:37 +02:00
SenrokaiandClaude Opus 5.5 7983a6875f CI Gitea : .gitea/workflows/ci.yml appelle avalon-vanguard/ci node.yml@v1
Portage de .github/workflows/ci.yml vers le workflow partagé, avec { e2e: true } :
mêmes déclencheurs (push sur main et develop, pull_request, workflow_dispatch),
même concurrency (groupe workflow + ref, cancel-in-progress), Node 22. node.yml
lance npm ci, lint, typecheck (etl, e2e, worker), npm test (sans watch : CI=true),
le build de production, puis Playwright (Chromium). secrets: inherit.

Différences assumées :
- un seul job séquentiel au lieu de deux jobs parallèles : l'e2e ne tourne plus
  si une étape précédente échoue ;
- pas de bloc `permissions: contents: read` : dans Gitea 1.27.3, le jeton d'un
  job appelé ne prend que les permissions déclarées par le workflow appelé
  (services/actions/reusable_workflow.go), un bloc ici n'aurait aucun effet.

Ce dossier .gitea/workflows fait ignorer .github/workflows par Gitea :
data-refresh.yml et pages.yml (ainsi que junie-review.yml) restent pour l'instant
réservés à GitHub et seront portés plus tard. .github/workflows/ci.yml reste en
place pour GitHub, où data-refresh.yml le déclenche (`gh workflow run ci.yml`).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:30:19 +02:00
SenrokaiandClaude Opus 5.5 6507da1610 Ajoute le script "typecheck" (etl, e2e, worker)
"typecheck" enchaîne etl:typecheck, e2e:typecheck et worker:typecheck : les trois
projets TypeScript que rien d'autre ne compile, et que la CI vérifiait en trois
étapes séparées. C'est le nom que lance le workflow partagé
avalon-vanguard/ci (node.yml).

App et specs n'y sont pas ajoutés : `ng build` vérifie déjà les types de
tsconfig.app.json et `ng test` ceux de tsconfig.spec.json. Vérifié en ajoutant une
erreur de type (TS2322) dans src/app/app.ts puis dans src/app/app.spec.ts : le
build, puis les tests, échouent avec [plugin angular-compiler].

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:29:00 +02:00
SenrokaiandClaude Opus 5.5 a47b5d3d92 Retire le code mort signalé par ESLint ; npm run lint passe
Corrige les 23 erreurs restantes, sans changer le comportement :
- no-unused-vars (18)
  - galaxy-system-scene.component.spec.ts : les 5 faux `links` déclaraient des
    paramètres _rangePc, _drawn, _budget seulement pour typer mock.calls ; ils sont
    typés par vi.fn<LinkScene['routing']['links']>(), même signature.
  - body-detail-scene : `const viewModel = this.viewModel()` jamais lu (lecture de
    signal hors contexte réactif, sans effet).
  - galaxy-system-scene : `const camera = this.engine.getCamera()` jamais lu dans
    swapToSystemSpace et swapToGalaxySpace. getCamera() ne lève que si le moteur
    n'est pas initialisé, or ces fonctions ne tournent qu'en rappel de rig.flyTo,
    piloté par le tick du moteur qui appelle déjà getCamera() à chaque image.
  - grid-plane, star-field-renderer : imports cités seulement dans un {@link} de
    JSDoc (SUN_HEIGHT_ABOVE_MIDPLANE_PC, REFERENCE_VIEWPORT_HEIGHT_PX). Les modules
    restent importés pour leurs autres exports.
- no-useless-assignment (4) : valeurs initiales jamais lues (u, v, s de gaussian(),
  affectés dans le do avant toute lecture ; raw de BookmarksStore.read(), affecté
  dans le try dont le catch retourne). Les déclarations gardent leur type.
- no-unused-expressions (1) : `this.display().jumpLinks;` dans l'effect des liens
  de saut est une lecture voulue (abonnement au signal) ; écrite
  `void this.display().jumpLinks;`, même lecture.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:22:36 +02:00
SenrokaiandClaude Opus 5.5 bd90b4a21f Injection par inject() plutôt que par paramètres de constructeur
Corrige les 14 erreurs @angular-eslint/prefer-inject (EngineService,
BodyDetailSceneComponent, InfoPanelComponent, GalaxySystemSceneComponent,
SearchComponent). Chaque paramètre devient un champ `inject()` de même nom, même
visibilité (navigationStore reste public : le template le lit) et dans le même
ordre, placé avant les autres champs : les dépendances restent résolues avant tout
autre initialiseur, comme l'étaient les paramètres. Les corps de constructeur
(effects, buildIndex) ne changent pas.

engine.service.spec.ts construisait EngineService avec `new` et un faux NgZone :
il le fait maintenant dans runInInjectionContext, avec le même faux NgZone fourni
par un Injector.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:21:21 +02:00
SenrokaiandClaude Opus 5.5 d0344d5d17 Ajoute ESLint : base partagée + couche Angular de @avalon-vanguard/config
- eslint.config.js reprend l'exemple du README du paquet (préfixe app, comme dans
  angular.json), plus les sorties ignorées par .gitignore (out-tsc, rapports
  Playwright, cache de l'ETL…) : ESLint ne lit pas .gitignore, et un
  playwright-report/index.html local serait sinon lu comme un template Angular.
- devDependencies aux mêmes plages que web-site (main) : eslint ^10.10.0,
  @eslint/js ^10.0.1, typescript-eslint ^8.70.0, angular-eslint ^22.5.0. Le paquet
  partagé les déclare en pairs optionnels : chaque dépôt qui l'importe les garde.
- Script "lint" : eslint .

`npm run lint` signale 37 erreurs existantes (14 prefer-inject, 18 no-unused-vars,
4 no-useless-assignment, 1 no-unused-expressions), corrigées dans les commits
suivants.

package-lock.json : angular-eslint tire @angular-devkit/core 22.2, qui épingle
picomatch 4.0.7 ; npm remonte donc picomatch 4.0.4 → 4.0.7 (et retire la copie
4.0.5 de vite), @jridgewell/sourcemap-codec 1.5.5 → 1.6.0, et remonte ora.
Vérifié depuis un `npm ci` propre contre main 822c699 : les 33 fichiers du
`ng build` de production ont le même sha256, et prettier --check, les 5 typechecks,
`ng test` (729 tests verts) et `playwright test --list` (17 tests) sont identiques.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:15:24 +02:00
SenrokaiandClaude Opus 5.5 deb840e9bd Adopte @avalon-vanguard/config : Prettier, tsconfig, .editorconfig
- .npmrc : le scope @avalon-vanguard pointe vers le registre npm de Gitea (lecture
  anonyme, aucune ligne _authToken).
- devDependency @avalon-vanguard/config ^1.0.0 (résolu depuis git.avalonvanguard.com).
- .prettierrc : "@avalon-vanguard/config/prettier/angular" (mêmes printWidth 100,
  singleQuote et parser angular pour *.html ; les défauts de Prettier 3 deviennent
  explicites).
- tsconfig.json étend @avalon-vanguard/config/tsconfig/angular.json ; files et
  references restent ici. Les sous-configs (app, spec, worker, e2e, etl) étendent
  toujours ../tsconfig.json, sans changement.
- .editorconfig : copie du fichier du paquet (seuls trois commentaires s'ajoutent).

Aucun changement de résultat, vérifié depuis un `npm ci` propre de chaque côté
(Node 24.15, rm -rf dist .angular/cache) contre main 822c699 :
- `ng build` de production : les 33 fichiers de dist/ ont le même sha256.
- `prettier --check .` : sortie identique (les mêmes 135 fichiers déjà signalés).
- etl, e2e et worker typecheck, tsc app et spec : propres avant et après ;
  `tsc --showConfig` sémantiquement identique pour les 5 projets.
- `ng test` : 729 tests sur 41 fichiers, tous verts des deux côtés.
- `playwright test --list` : identique (17 tests, 8 fichiers).
- node_modules : seul @avalon-vanguard/config s'ajoute.

Note : index.html embarque la CSS de Google Fonts téléchargée au moment du build ;
deux builds de main à quelques minutes d'écart peuvent donc différer sur ce seul
fichier. Les deux builds comparés ici ont été faits à la suite.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 17:11:09 +02:00
SenrokaiandClaude Opus 5.5 d2b0cc5008 package-lock.json : retire 49 entrées de pairs optionnels jamais installées
npm 11.12.1 retire de lui-même ces entrées dès la première installation
(`npm install --package-lock-only` sur main donne exactement ce diff) : @babel/*,
istanbul-lib-*, rollup et ses binaires de plateforme, etc. Ce sont des pairs
optionnels (dev + optional + peer) de @angular/build, @angular/compiler-cli et
vitest, que `npm ci` n'installe pas : node_modules est identique avant et après.

Commit à part pour que le diff de l'adoption de @avalon-vanguard/config reste lisible.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 16:57:18 +02:00