0.0.3-alpha.4
This commit is contained in:
191
deltas/0.0.3/alpha.4.md
Normal file
191
deltas/0.0.3/alpha.4.md
Normal file
@@ -0,0 +1,191 @@
|
||||
<!-- file: deltas/0.0.3/alpha.4.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Delta 0.0.3-alpha.4 — manifests Cargo workspace et membre
|
||||
|
||||
## Baseline et version
|
||||
|
||||
Baseline : `0.0.3-alpha.3`, avec `history/0.0.3/alpha.3.md` appliqué et committé. Ce delta MUST NOT être appliqué avant ce commit.
|
||||
|
||||
Version avant application :
|
||||
|
||||
```text
|
||||
0.0.3-alpha.3
|
||||
```
|
||||
|
||||
Version après application :
|
||||
|
||||
```text
|
||||
0.0.3-alpha.4
|
||||
```
|
||||
|
||||
## Objet
|
||||
|
||||
Fournir les deux manifests Cargo prévus dans le plan après son REPLAN `SPLIT` : un workspace virtuel à release commune et une crate bibliothèque membre. Les sections d'héritage, les lints Rust/Clippy communs, la version de release et le périmètre des dépendances doivent être compréhensibles sans figer les identités KSP/Games ni une liste de dépendances tierces.
|
||||
|
||||
Le manifest racine reprend les trois lints Rust et les `18` niveaux Clippy effectivement communs aux deux projets. Il déclare un bloc `[workspace.dependencies]` initialement vide. Le membre hérite explicitement des métadonnées présentes et des lints par `[lints] workspace = true`. La documentation distingue l'adaptation ordinaire d'une exception FFI locale, qui ne peut combiner cet héritage avec des lints locaux dans une même crate. La version `0.1.0` et le nom `project-core-lib` sont des exemples à remplacer, pas des valeurs de PGR ou d'un projet tiers.
|
||||
|
||||
Le plan vivant reçoit deux corrections factuelles : PGR possède désormais plus de deux utilitaires Python et la famille énumère cinq responsabilités, et non quatre. Ces corrections n'altèrent aucun delta ni history précédent.
|
||||
|
||||
## Scope
|
||||
|
||||
REPLACE :
|
||||
|
||||
```text
|
||||
VERSION
|
||||
docs/plans/003-V0_0_3_TEMPLATES_AUDITS_PLAN.md
|
||||
docs/templates/001-RUST_CARGO_TOOLING.md
|
||||
```
|
||||
|
||||
ADD :
|
||||
|
||||
```text
|
||||
templates/rust-cargo/Cargo.toml
|
||||
templates/rust-cargo/crates/project-core-lib/Cargo.toml
|
||||
docs/templates/002-CARGO_MANIFESTS.md
|
||||
deltas/0.0.3/alpha.4.md
|
||||
```
|
||||
|
||||
DELETE : aucun.
|
||||
|
||||
L'archive contient uniquement ces fichiers complets. Aucun fichier source Rust, history `alpha.4`, suppression, dépendance de build de PGR ou version tierce n'est introduit.
|
||||
|
||||
## Validation opérateur
|
||||
|
||||
Après application sur le commit `alpha.3` :
|
||||
|
||||
```bash
|
||||
test "$(cat VERSION)" = '0.0.3-alpha.4'
|
||||
git cat-file -e HEAD:history/0.0.3/alpha.3.md
|
||||
test -f history/0.0.3/alpha.3.md
|
||||
test ! -e history/0.0.3/alpha.4.md
|
||||
test -f deltas/0.0.3/alpha.4.md
|
||||
|
||||
python3 -B - <<'PY'
|
||||
from pathlib import Path
|
||||
import json
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
import tomllib
|
||||
|
||||
source = Path('templates/rust-cargo')
|
||||
root_file = source / 'Cargo.toml'
|
||||
member_file = source / 'crates/project-core-lib/Cargo.toml'
|
||||
root = tomllib.loads(root_file.read_text(encoding='utf-8'))
|
||||
member = tomllib.loads(member_file.read_text(encoding='utf-8'))
|
||||
assert root['workspace']['resolver'] == '3'
|
||||
assert root['workspace']['members'] == ['crates/project-core-lib']
|
||||
assert root['workspace']['package']['version'] == '0.1.0' # Explicit example.
|
||||
assert root['workspace']['package']['edition'] == '2024'
|
||||
assert root['workspace']['package']['publish'] is False
|
||||
assert root['workspace']['dependencies'] == {}
|
||||
assert root['workspace']['lints']['rust'] == {
|
||||
'missing_docs': 'warn', 'unreachable_pub': 'deny', 'unsafe_code': 'forbid'
|
||||
}
|
||||
clippy = root['workspace']['lints']['clippy']
|
||||
assert len(clippy) == 18 and clippy['implicit_return'] == 'deny'
|
||||
assert clippy['needless_return'] == 'allow' and clippy['unwrap_used'] == 'deny'
|
||||
assert member['package']['name'] == 'project-core-lib'
|
||||
for field in ('version', 'edition', 'publish'):
|
||||
assert member['package'][field] == {'workspace': True}, field
|
||||
assert member['dependencies'] == {} and member['lints'] == {'workspace': True}
|
||||
for path in (root_file, member_file):
|
||||
lines = path.read_text(encoding='utf-8').splitlines()
|
||||
assert lines[:2] == [f'# file: {path.as_posix()}', '# version: 1'], path
|
||||
print('Cargo manifest TOML audit: clean (2 file(s))')
|
||||
|
||||
if shutil.which('cargo') is None:
|
||||
print('Cargo workspace smoke: toolchain unavailable; TOML audit only')
|
||||
else:
|
||||
with tempfile.TemporaryDirectory(prefix='pgr-cargo-manifests-') as folder:
|
||||
workspace = Path(folder)
|
||||
crate = workspace / 'crates/project-core-lib'
|
||||
(crate / 'src').mkdir(parents=True)
|
||||
shutil.copy2(root_file, workspace / 'Cargo.toml')
|
||||
shutil.copy2(member_file, crate / 'Cargo.toml')
|
||||
(crate / 'src/lib.rs').write_text(
|
||||
'//! Minimal template check.\n\n/// Return one.\n'
|
||||
'pub fn value() -> u8 {\n return 1;\n}\n', encoding='utf-8'
|
||||
)
|
||||
command = ['cargo', 'metadata', '--manifest-path', str(workspace / 'Cargo.toml'),
|
||||
'--format-version', '1', '--no-deps', '--offline']
|
||||
result = subprocess.run(command, cwd=workspace, text=True,
|
||||
capture_output=True, check=True)
|
||||
package = json.loads(result.stdout)['packages'][0]
|
||||
assert package['name'] == 'project-core-lib'
|
||||
assert package['version'] == '0.1.0' and package['edition'] == '2024'
|
||||
subprocess.run(['cargo', 'check', '--workspace', '--offline'],
|
||||
cwd=workspace, check=True)
|
||||
if subprocess.run(['cargo', 'clippy', '--version'], capture_output=True).returncode == 0:
|
||||
subprocess.run(['cargo', 'clippy', '--workspace', '--all-targets',
|
||||
'--all-features', '--offline', '--', '-D', 'warnings'],
|
||||
cwd=workspace, check=True)
|
||||
|
||||
# Inherited forbid must reject unsafe code before a local FFI exception.
|
||||
(crate / 'src/lib.rs').write_text(
|
||||
'//! Minimal FFI exception check.\n\n/// Return one.\n'
|
||||
'pub fn value() -> u8 {\n'
|
||||
' let value: u8 = 1;\n let ptr: *const u8 = &value;\n'
|
||||
' unsafe { return *ptr; }\n}\n', encoding='utf-8'
|
||||
)
|
||||
rejected = subprocess.run(['cargo', 'check', '--workspace', '--offline'],
|
||||
cwd=workspace, capture_output=True, text=True)
|
||||
assert rejected.returncode != 0 and 'unsafe' in rejected.stderr
|
||||
|
||||
# Cargo must accept a local lint table in place of inheritance.
|
||||
local = member_file.read_text(encoding='utf-8').replace(
|
||||
'[lints]\nworkspace = true\n',
|
||||
'[lints.rust]\nmissing_docs = "warn"\n'
|
||||
'unreachable_pub = "deny"\nunsafe_code = "allow"\n\n'
|
||||
'[lints.clippy]\n' + ''.join(
|
||||
f'{name} = {json.dumps(level)}\n' for name, level in clippy.items()
|
||||
)
|
||||
)
|
||||
assert '[lints.rust]' in local and '[lints]\nworkspace = true' not in local
|
||||
(crate / 'Cargo.toml').write_text(local, encoding='utf-8')
|
||||
subprocess.run(['cargo', 'check', '--workspace', '--offline'],
|
||||
cwd=workspace, check=True)
|
||||
print('Cargo workspace smoke: clean (inherited and local lints)')
|
||||
PY
|
||||
|
||||
python3 -B scripts/audit_markdown_tables.py \
|
||||
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
||||
python3 -B scripts/audit_markdown_links.py \
|
||||
README.md RULES.md ROADMAP.md CHANGELOG.md docs deltas history prompts
|
||||
|
||||
python3 -B - <<'PY'
|
||||
from pathlib import Path
|
||||
import re
|
||||
|
||||
files = [Path(name) for name in ('README.md', 'RULES.md', 'ROADMAP.md', 'CHANGELOG.md')]
|
||||
for directory in ('docs', 'deltas', 'history', 'prompts'):
|
||||
files.extend(Path(directory).rglob('*.md'))
|
||||
files = sorted(set(files))
|
||||
for path in files:
|
||||
lines = path.read_text(encoding='utf-8').splitlines()
|
||||
assert len(lines) >= 2 and lines[0] == f'<!-- file: {path.as_posix()} -->', path
|
||||
assert re.fullmatch(r'<!-- version: [1-9][0-9]* -->', lines[1]), path
|
||||
print(f'Markdown header audit: clean ({len(files)} file(s))')
|
||||
PY
|
||||
|
||||
git diff --check
|
||||
git add VERSION docs/plans/003-V0_0_3_TEMPLATES_AUDITS_PLAN.md \
|
||||
docs/templates/001-RUST_CARGO_TOOLING.md docs/templates/002-CARGO_MANIFESTS.md \
|
||||
templates/rust-cargo/Cargo.toml templates/rust-cargo/crates/project-core-lib/Cargo.toml \
|
||||
deltas/0.0.3/alpha.4.md
|
||||
git diff --cached --check
|
||||
git status --short
|
||||
```
|
||||
|
||||
Scope attendu avant ajout du history : les trois `REPLACE` et les quatre `ADD` ci-dessus. Revue opérateur : vérifier que le manifest membre hérite seulement des champs racine présents, que les lints Clippy sont ceux des deux corpus et que la version d'exemple ainsi que le nom de crate doivent être remplacés lors d'une adoption réelle. Si Cargo n'est pas disponible dans l'environnement de PGR, le smoke workspace est indiqué comme non exécuté et le parsing TOML reste la preuve locale ; l'adoption dans un projet Rust doit exécuter sa propre gate Cargo.
|
||||
|
||||
## Transition
|
||||
|
||||
### PASS
|
||||
|
||||
Fournir séparément `history/0.0.3/alpha.4.md` avec les sorties réellement observées, l'appliquer et committer la tranche avant le delta `alpha.5` relatif aux headers Markdown.
|
||||
|
||||
### FAIL
|
||||
|
||||
Consigner le défaut dans le history, puis corriger manifests ou instructions dans `alpha.4.fix.1` sauf besoin justifié d'un nouveau REPLAN.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/003-V0_0_3_TEMPLATES_AUDITS_PLAN.md -->
|
||||
<!-- version: 4 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Plan 0.0.3 — templates initiaux et audits réutilisables
|
||||
|
||||
@@ -15,7 +15,7 @@ La source autoritaire est l'archive Gitea fournie `pgr-v0.0.2.zip`, issue selon
|
||||
|
||||
Le rapport séparé `pgr-0.0.2-publish.001-report.md` indique `PASS` et donne le même hash. Il atteste la publication post-tag sans appartenir au tag. L'archive sans `.git` ne peut prouver indépendamment le commit ni l'identité du tag ; ces éléments sont les déclarations et preuves de publication de l'opérateur.
|
||||
|
||||
Le contrat de démarrage est `prompts/003-V0_0_3_START_PROMPT.md`. Les règles applicables partent de `RULES.md`, puis des familles `200`, `210`, `300`, `400`, du modèle de profils `003` et des profils `500`/`510`, `520`, `600`/`610` selon leur scope. PGR reste un dépôt documentaire avec deux utilitaires Python ; les toolchains Rust, Java et Android ne deviennent pas des prérequis du dépôt.
|
||||
Le contrat de démarrage est `prompts/003-V0_0_3_START_PROMPT.md`. Les règles applicables partent de `RULES.md`, puis des familles `200`, `210`, `300`, `400`, du modèle de profils `003` et des profils `500`/`510`, `520`, `600`/`610` selon leur scope. PGR reste un dépôt documentaire doté d'outils Python ; les toolchains Rust, Java et Android ne deviennent pas des prérequis du dépôt.
|
||||
|
||||
Deux corpus de comparaison supplémentaires, fournis après le gate initial de `alpha.1`, ont été inspectés pour ce fix documentaire :
|
||||
|
||||
@@ -60,7 +60,7 @@ Les deux `rustfmt.toml` ont un contenu technique identique et seulement un numé
|
||||
|
||||
### Retenu : famille Rust/Cargo minimale
|
||||
|
||||
Le besoin concret n'est pas limité à `rustfmt.toml`. La première famille doit couvrir quatre responsabilités distinctes :
|
||||
Le besoin concret n'est pas limité à `rustfmt.toml`. La première famille doit couvrir cinq responsabilités distinctes :
|
||||
|
||||
1. `rustfmt.toml` : options communes dont la valeur est justifiée ; alignement de `edition` avec le projet destinataire ; ne pas reprendre mécaniquement chaque préférence des deux sources ;
|
||||
2. configuration Clippy : niveaux de lint Rust/Clippy dans les sections Cargo `[workspace.lints.rust]` et `[workspace.lints.clippy]`, plus `clippy.toml` pour les seuils et réglages conservés dans le profil de départ éprouvé ; chaque projet peut adapter ces choix ;
|
||||
|
||||
4
docs/templates/001-RUST_CARGO_TOOLING.md
vendored
4
docs/templates/001-RUST_CARGO_TOOLING.md
vendored
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/templates/001-RUST_CARGO_TOOLING.md -->
|
||||
<!-- version: 2 -->
|
||||
<!-- version: 3 -->
|
||||
|
||||
# Templates d'outillage Rust/Cargo
|
||||
|
||||
@@ -11,7 +11,7 @@ Ces trois fichiers fournissent une baseline de configuration issue des conventio
|
||||
- [`clippy.toml`](../../templates/rust-cargo/clippy.toml) — paramètres de lints (seuils, exceptions de tests, identifiants courts) issus du noyau partagé des deux projets ;
|
||||
- [`.cargo/config.toml`](../../templates/rust-cargo/.cargo/config.toml) — emplacements des artefacts Cargo hors de la racine source.
|
||||
|
||||
Les niveaux `deny`, `allow`, `warn` et `forbid` des lints Rust/Clippy appartiennent au `Cargo.toml` du workspace, selon [`510-RUST_CARGO.md`](../rules/510-RUST_CARGO.md). `clippy.toml` règle des paramètres de lints, pas leur niveau. Les modèles de manifests racine et membre, ainsi que l'héritage `[lints] workspace = true`, sont prévus en `alpha.4` après l'extraction des audits de style de `alpha.3`.
|
||||
Les niveaux `deny`, `allow`, `warn` et `forbid` des lints Rust/Clippy appartiennent au `Cargo.toml` du workspace, selon [`510-RUST_CARGO.md`](../rules/510-RUST_CARGO.md). `clippy.toml` règle des paramètres de lints, pas leur niveau. Les deux modèles Cargo et l'héritage `[lints] workspace = true` sont documentés dans [`002-CARGO_MANIFESTS.md`](002-CARGO_MANIFESTS.md).
|
||||
|
||||
## Copier et adapter
|
||||
|
||||
|
||||
47
docs/templates/002-CARGO_MANIFESTS.md
vendored
Normal file
47
docs/templates/002-CARGO_MANIFESTS.md
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
<!-- file: docs/templates/002-CARGO_MANIFESTS.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Modèles de manifests Cargo workspace et crate membre
|
||||
|
||||
## Rôle des deux fichiers
|
||||
|
||||
Le [manifest racine](../../templates/rust-cargo/Cargo.toml) est celui d'un workspace virtuel à une unité de release ; le [manifest membre](../../templates/rust-cargo/crates/project-core-lib/Cargo.toml) montre une crate bibliothèque ordinaire. Les deux fichiers forment un exemple TOML syntaxiquement valide. Après copie dans un nouveau projet, il faut aussi fournir le code source de la crate avant de demander à Cargo de la compiler. Le dépôt PGR ne devient pas lui-même un workspace Cargo.
|
||||
|
||||
Ces modèles prolongent les trois configurations de [`001-RUST_CARGO_TOOLING.md`](001-RUST_CARGO_TOOLING.md). Le propriétaire des choix normatifs reste [`510-RUST_CARGO.md`](../rules/510-RUST_CARGO.md). Les chemins `project-core-lib`, le nom du package et la version `0.1.0` sont des **valeurs d'exemple à remplacer** : cette version ne reflète pas `VERSION` de PGR et ne définit pas la version d'un autre projet.
|
||||
|
||||
## Adopter le manifest racine
|
||||
|
||||
Copier `templates/rust-cargo/Cargo.toml` vers `Cargo.toml` du projet, corriger son header `# file:` et commencer sa propre révision de fichier à `1`. Adapter `members` aux répertoires qui existent effectivement, puis choisir la version canonique de l'unité de release. Lorsque toutes les crates partagent une seule release, aligner `[workspace.package].version` sur le `VERSION` de ce projet ; plusieurs unités de release indépendantes ne doivent pas hériter d'une version fictive commune.
|
||||
|
||||
L'édition `2024` et `resolver = "3"` sont cohérents avec l'exemple [`rustfmt.toml`](../../templates/rust-cargo/rustfmt.toml). Pour un workspace virtuel, fixer explicitement le resolver souhaité ; adapter ensemble l'édition, Rustfmt et la toolchain compatible si le projet prend d'autres valeurs. `publish = false` est un défaut prudent pour cet exemple ; définir la politique de publication réelle avant de publier une crate.
|
||||
|
||||
`license`, `repository` et `authors` ne sont volontairement pas renseignés avec des identités fictives. Si ces métadonnées ont une valeur vraie et commune, les déclarer dans `[workspace.package]` et les hériter explicitement dans chaque crate concernée, par exemple `license.workspace = true` seulement après avoir déclaré `license` à la racine. Ne pas imposer un auteur, une licence ou une URL propres à KSP/Games.
|
||||
|
||||
Le bloc `[workspace.dependencies]` est vide tant qu'aucune dépendance concrète ne sert plusieurs crates. Déclarer à la racine seulement les contraintes et features réellement communes ; les features propres à un membre sont activées sur sa dépendance locale. Cargo ajoute les features demandées au membre à celles déjà sélectionnées au workspace ; éviter d'activer globalement une feature de test ou de plateforme par facilité. Les dépendances de test appartiennent à `[dev-dependencies]` du membre qui les utilise.
|
||||
|
||||
Les trois lints Rust et les `18` niveaux Clippy reprennent la politique partagée observée dans KSP et Games. Les `allow` retiennent leurs choix de style explicite, notamment `needless_return` malgré `implicit_return = "deny"`, et évitent qu'un lint de suggestion réécrive systématiquement ce style. Réviser leur pertinence pour le projet avant adoption. Les seuils et réglages supplémentaires appartiennent au [`clippy.toml`](../../templates/rust-cargo/clippy.toml) distinct : ce fichier ne définit aucun niveau de lint.
|
||||
|
||||
## Adopter le manifest membre
|
||||
|
||||
Copier le membre vers `crates/<nom>/Cargo.toml`, adapter `name`, son chemin dans `members` et le header `# file:`. `version.workspace = true`, `edition.workspace = true` et `publish.workspace = true` rendent visibles les héritages choisis ; ajouter séparément `license.workspace = true`, `repository.workspace = true` ou `authors.workspace = true` si les valeurs existent à la racine et concernent cette crate. `[lints] workspace = true` est requis pour reprendre les niveaux du workspace : leur présence à la racine ne suffit pas à les appliquer automatiquement aux membres.
|
||||
|
||||
Le bloc `[dependencies]` vide se remplit selon les besoins de la crate. Pour une dépendance déjà déclarée sous `[workspace.dependencies]`, utiliser localement `nom = { workspace = true }`, avec `features = [...]` au besoin. Pour une dépendance strictement locale, choisir sa contrainte directement dans ce membre ; aucune liste tierce arbitraire n'est copiée par ce modèle.
|
||||
|
||||
Une application binaire peut reprendre les mêmes héritages après adaptation du nom, du layout et de sa cible `src/main.rs` ; ne pas fabriquer un deuxième manifest quasi identique. Une crate à version ou politique de publication réellement indépendante doit déclarer ses valeurs locales et ne plus hériter ces champs par automatisme.
|
||||
|
||||
## Exception locale de lints
|
||||
|
||||
Une frontière FFI peut avoir besoin de `unsafe_code = "allow"` dans une crate particulière, comme l'entrée Android observée dans Games. Cette exception demande justification, portée étroite et validation du code `unsafe` concerné. Cargo ne permet pas de combiner `workspace = true` avec des définitions de lints locaux dans le même manifest membre : retirer l'héritage `[lints]` pour cette crate et déclarer localement `[lints.rust]` ainsi que `[lints.clippy]`, en recopiant les niveaux partagés réellement conservés puis en ajustant seulement l'exception motivée. Les autres membres continuent d'hériter des lints racine.
|
||||
|
||||
## Vérification dans le projet destinataire
|
||||
|
||||
Après avoir ajouté le code source nécessaire, vérifier d'abord la résolution des manifests et les héritages, puis les contrôles réellement applicables :
|
||||
|
||||
```bash
|
||||
cargo metadata --format-version 1 --no-deps
|
||||
cargo fmt --all -- --check
|
||||
cargo check --workspace
|
||||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||
```
|
||||
|
||||
Vérifier séparément le cas d'une crate à lints locaux lorsque le projet comporte réellement une exception. `Cargo.lock` et les artefacts créés par ces commandes suivent la politique du projet et la configuration Cargo de [`001-RUST_CARGO_TOOLING.md`](001-RUST_CARGO_TOOLING.md).
|
||||
54
history/0.0.3/alpha.4.md
Normal file
54
history/0.0.3/alpha.4.md
Normal file
@@ -0,0 +1,54 @@
|
||||
<!-- file: history/0.0.3/alpha.4.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# History 0.0.3-alpha.4 — manifests Cargo workspace et membre
|
||||
|
||||
## Statut
|
||||
|
||||
PASS
|
||||
|
||||
L'opérateur a exécuté le `2026-09-24` la gate de `alpha.4` avec Cargo disponible. Les deux manifests sont valides ; la vérification en workspace temporaire couvre l'héritage des lints, une erreur `unsafe` attendue sous `forbid`, puis la réussite avec une exception locale déclarée dans la crate.
|
||||
|
||||
## Baseline et version
|
||||
|
||||
`git cat-file -e HEAD:history/0.0.3/alpha.3.md` a confirmé la présence du history précédent dans `HEAD`. La version après application est `0.0.3-alpha.4`, le delta et le history `alpha.3` sont présents, et `history/0.0.3/alpha.4.md` était absent lors du contrôle.
|
||||
|
||||
## Validation opérateur observée
|
||||
|
||||
Le contrôle TOML a affiché :
|
||||
|
||||
```text
|
||||
Cargo manifest TOML audit: clean (2 file(s))
|
||||
```
|
||||
|
||||
Le smoke a effectué `cargo metadata` sur un workspace d'essai, puis `cargo check --workspace --offline` et `cargo clippy --workspace --all-targets --all-features --offline -- -D warnings` sur une crate minimale. Après insertion d'un bloc `unsafe`, le test attendu d'interdiction a été satisfait ; `cargo check` est redevenu propre après remplacement de l'héritage par les lints locaux ciblés. Résultat affiché :
|
||||
|
||||
```text
|
||||
Cargo workspace smoke: clean (inherited and local lints)
|
||||
```
|
||||
|
||||
Les audits documentaires affichent :
|
||||
|
||||
```text
|
||||
Markdown table audit: clean (3 table(s), 86 file(s))
|
||||
Markdown link audit: clean (67 local link(s), 86 file(s))
|
||||
Markdown header audit: clean (86 file(s))
|
||||
```
|
||||
|
||||
`git diff --check` et `git diff --cached --check` n'ont pas affiché de diagnostic. Après `git add`, l'état indexé fourni contient exactement :
|
||||
|
||||
```text
|
||||
M VERSION
|
||||
A deltas/0.0.3/alpha.4.md
|
||||
M docs/plans/003-V0_0_3_TEMPLATES_AUDITS_PLAN.md
|
||||
M docs/templates/001-RUST_CARGO_TOOLING.md
|
||||
A docs/templates/002-CARGO_MANIFESTS.md
|
||||
A templates/rust-cargo/Cargo.toml
|
||||
A templates/rust-cargo/crates/project-core-lib/Cargo.toml
|
||||
```
|
||||
|
||||
Le terminal intercale certains fragments de la commande de validation dans les sorties du smoke ; les résultats Cargo et les résultats finaux des audits restent identifiables. Aucun échec n'est signalé dans la transcription fournie.
|
||||
|
||||
## Transition
|
||||
|
||||
Appliquer le présent history et committer la tranche `alpha.4` avant d'appliquer un delta `alpha.5`. La présence de ce futur commit n'est pas déduite des commandes fournies. La tranche suivante concerne le contrôle monotâche des headers Markdown déjà effectué manuellement dans les gates précédentes.
|
||||
41
templates/rust-cargo/Cargo.toml
Normal file
41
templates/rust-cargo/Cargo.toml
Normal file
@@ -0,0 +1,41 @@
|
||||
# file: templates/rust-cargo/Cargo.toml
|
||||
# version: 1
|
||||
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["crates/project-core-lib"]
|
||||
|
||||
[workspace.package]
|
||||
# Replace this example with the release-unit version before adopting this template.
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
publish = false
|
||||
# Add license, repository, and authors only with the project's real values.
|
||||
|
||||
[workspace.dependencies]
|
||||
# Add dependencies actually shared by multiple crates, with reviewed versions.
|
||||
|
||||
[workspace.lints.rust]
|
||||
missing_docs = "warn"
|
||||
unreachable_pub = "deny"
|
||||
unsafe_code = "forbid"
|
||||
|
||||
[workspace.lints.clippy]
|
||||
unwrap_used = "deny"
|
||||
expect_used = "deny"
|
||||
implicit_return = "deny"
|
||||
needless_return = "allow"
|
||||
useless_vec = "deny"
|
||||
question_mark = "deny"
|
||||
question_mark_used = "deny"
|
||||
needless_match = "allow"
|
||||
manual_ok_err = "allow"
|
||||
manual_unwrap_or = "allow"
|
||||
manual_map = "allow"
|
||||
match_like_matches_macro = "allow"
|
||||
single_match = "allow"
|
||||
manual_unwrap_or_default = "allow"
|
||||
manual_find = "allow"
|
||||
explicit_counter_loop = "allow"
|
||||
get_first = "allow"
|
||||
implicit_saturating_sub = "allow"
|
||||
14
templates/rust-cargo/crates/project-core-lib/Cargo.toml
Normal file
14
templates/rust-cargo/crates/project-core-lib/Cargo.toml
Normal file
@@ -0,0 +1,14 @@
|
||||
# file: templates/rust-cargo/crates/project-core-lib/Cargo.toml
|
||||
# version: 1
|
||||
|
||||
[package]
|
||||
name = "project-core-lib"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
publish.workspace = true
|
||||
|
||||
[dependencies]
|
||||
# Inherit only the workspace dependencies this crate actually uses.
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
Reference in New Issue
Block a user