« Demander à une IA » : bouton, feuille du prompt à son adresse, copie

Le bouton, secondaire, dans la feuille du maître, sur le bilan, dans
l'analyse et sur la fiche ouverte du glossaire. Il ouvre la feuille du
prompt (…/ia, amendement de l'ADR 0013), où le texte se relit avant la
copie : navigator.clipboard, repli par sélection du texte, bandeau
« Prompt copié » (2 s). Gabarits copiés par make site (amendement de
l'ADR 0008), scénario « Demander à une IA », 1f marquée faite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 20:56:56 +01:00
co-authored by Claude Opus 5.5
parent 4f0611c24c
commit 2a1fe1b04c
27 changed files with 1593 additions and 48 deletions
+31 -7
View File
@@ -251,7 +251,12 @@ test("prompt d'une décision de videau : les équités de la feuille du maître"
assert.ok(prompt.includes(`J'ai choisi de ${CUBE_ACTION_WORDS[advice.action]},`), prompt);
for (const key of ["noDouble", "doubleTake", "doublePass"] as const) {
const value = formatEquity(advice.equities[key]);
assert.match(prompt, new RegExp(`- ${ADVICE_TEXTS.cubeRows[key]}( \\(ma décision\\))? : ${value.replace("+", "\\+")}\\n`));
assert.match(
prompt,
new RegExp(
`- ${ADVICE_TEXTS.cubeRows[key]}( \\(ma décision\\))? : ${value.replace("+", "\\+")}\\n`,
),
);
}
assert.ok(prompt.includes(`Écart de ma décision : ${formatEquity(advice.equityLoss)}.`));
}
@@ -294,10 +299,22 @@ test("prompt du bilan : résultat, décomptes, taux et chance de l'écran, erreu
const { player, computer, counts } = summary;
// Les chiffres de « Voir les chiffres du moteur » de l'analyse, et les
// trois cases du bilan.
assert.ok(prompt.includes(`Mon erreur par décision : ${signed(-player.errorRate.perDecision)} sur ${player.errorRate.decisions} décision`));
assert.ok(prompt.includes(`soit le niveau ${MATCH_TEXTS.levels[player.errorRate.level].name} ;`));
assert.ok(prompt.includes(`celle de l'ordinateur : ${signed(-computer.errorRate.perDecision)} sur`));
assert.ok(prompt.includes(`La chance de mes dés par tour : ${signed(player.luck.perRoll)} (${diceWords(phrases, player.luck.rating)})`));
assert.ok(
prompt.includes(
`Mon erreur par décision : ${signed(-player.errorRate.perDecision)} sur ${player.errorRate.decisions} décision`,
),
);
assert.ok(
prompt.includes(`soit le niveau ${MATCH_TEXTS.levels[player.errorRate.level].name} ;`),
);
assert.ok(
prompt.includes(`celle de l'ordinateur : ${signed(-computer.errorRate.perDecision)} sur`),
);
assert.ok(
prompt.includes(
`La chance de mes dés par tour : ${signed(player.luck.perRoll)} (${diceWords(phrases, player.luck.rating)})`,
),
);
assert.ok(prompt.includes(`celle de l'ordinateur : ${signed(computer.luck.perRoll)}.`));
assert.ok(prompt.includes(`Mes décisions : ${counts.good} bon`), prompt);
assert.ok(prompt.includes(`, ${counts.bad + counts.veryBad} erreur`), prompt);
@@ -306,8 +323,15 @@ test("prompt du bilan : résultat, décomptes, taux et chance de l'écran, erreu
// Le coup à revoir : sa position, et sa ligne avec son écart.
const worst = summary.toReview.advice;
assert.equal(position.positionId, worst.position);
assert.ok(prompt.includes(`Le coup à revoir, ma plus grosse erreur (coup ${summary.toReview.turn})`));
assert.ok(prompt.includes(`écart ${formatEquity(worst.equityLoss)} (${masterWords(phrases, worst).word})`), prompt);
assert.ok(
prompt.includes(`Le coup à revoir, ma plus grosse erreur (coup ${summary.toReview.turn})`),
);
assert.ok(
prompt.includes(
`écart ${formatEquity(worst.equityLoss)} (${masterWords(phrases, worst).word})`,
),
prompt,
);
});
test("prompt du bilan sans erreur : la position finale", async () => {