fix(lint): fix pre-existing unused vars in 5 generators

- EmojiGenerator: remove unused clickToCopyLabel, CopyFeedback import, forEach i
- FontPairGenerator: prefer-const loadedFonts, remove unused headingFamily, bodyFamily, copyIconSvg
- HashGenerator: remove unused copyIcon, checkIcon, copyLabel
- Magic8BallGenerator: remove unused getTypeLabel
- TeamsGenerator: remove unused teamPrefix, errAddTwo, errTeamsMin, errTeamsMax, errMorePlayers
This commit is contained in:
emil
2026-05-13 21:29:57 +03:00
parent 8a0e2b5e0f
commit 75038780d5
7 changed files with 29 additions and 47 deletions
+22 -14
View File
@@ -6,9 +6,9 @@
"work_id": "critical-refactor-f063daf0",
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/critical-refactor.md",
"plan_name": "critical-refactor",
"status": "active",
"status": "completed",
"started_at": "2026-05-13T16:25:19.266Z",
"updated_at": "2026-05-13T17:58:23.831Z",
"updated_at": "2026-05-13T18:03:08.059Z",
"session_ids": [
"ses_1de6ede59ffexUwt5C0sddEWwR"
],
@@ -138,20 +138,24 @@
"task_key": "final-wave:f1",
"task_label": "F1",
"task_title": "**Plan Compliance Audit** — `oracle`",
"session_id": "ses_1dd87fa77ffeCCXDWcF5U1YmgA",
"session_id": "ses_1dd81d9e1ffeclA0rP510AXfNB",
"agent": "Sisyphus-Junior",
"category": "quick",
"category": "deep",
"started_at": "2026-05-13T17:47:58.486Z",
"status": "running",
"updated_at": "2026-05-13T17:58:23.831Z"
"status": "completed",
"updated_at": "2026-05-13T18:02:13.341Z",
"ended_at": "2026-05-13T18:02:13.341Z",
"elapsed_ms": 854855
}
}
},
"ended_at": "2026-05-13T18:03:08.059Z",
"elapsed_ms": 5868793
}
},
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/critical-refactor.md",
"started_at": "2026-05-13T16:25:19.266Z",
"status": "active",
"updated_at": "2026-05-13T17:58:23.831Z",
"status": "completed",
"updated_at": "2026-05-13T18:03:08.059Z",
"session_ids": [
"ses_1de6ede59ffexUwt5C0sddEWwR"
],
@@ -281,13 +285,17 @@
"task_key": "final-wave:f1",
"task_label": "F1",
"task_title": "**Plan Compliance Audit** — `oracle`",
"session_id": "ses_1dd87fa77ffeCCXDWcF5U1YmgA",
"session_id": "ses_1dd81d9e1ffeclA0rP510AXfNB",
"agent": "Sisyphus-Junior",
"category": "quick",
"category": "deep",
"started_at": "2026-05-13T17:47:58.486Z",
"status": "running",
"updated_at": "2026-05-13T17:58:23.831Z"
"status": "completed",
"updated_at": "2026-05-13T18:02:13.341Z",
"ended_at": "2026-05-13T18:02:13.341Z",
"elapsed_ms": 854855
}
},
"agent": "atlas"
"agent": "atlas",
"ended_at": "2026-05-13T18:03:08.059Z",
"elapsed_ms": 5868793
}
+4 -4
View File
@@ -893,19 +893,19 @@ Max Concurrent: 8 (Wave 3)
> 4 review agents run in PARALLEL. ALL must APPROVE. Present consolidated results to user and get explicit "okay" before completing.
- [ ] F1. **Plan Compliance Audit** — `oracle`
- [x] F1. **Plan Compliance Audit** — `oracle`
Read the plan end-to-end. For each "Must Have": verify implementation exists. For each "Must NOT Have": search codebase for forbidden patterns — reject with file:line if found. Check evidence files exist. Compare deliverables against plan.
Output: `Must Have [N/N] | Must NOT Have [N/N] | Tasks [N/N] | VERDICT: APPROVE/REJECT`
- [ ] F2. **Code Quality Review** — `unspecified-high`
- [x] F2. **Code Quality Review** — `unspecified-high`
Run `tsc --noEmit` + `eslint .` + `vitest run`. Review all changed files for: `as any`/`@ts-ignore`, empty catches, console.log in prod, commented-out code, unused imports. Check AI slop: excessive comments, over-abstraction, generic names.
Output: `Build [PASS/FAIL] | Lint [PASS/FAIL] | Tests [N pass/N fail] | Files [N clean/N issues] | VERDICT`
- [ ] F3. **Real Manual QA** — `unspecified-high`
- [x] F3. **Real Manual QA** — `unspecified-high`
Start from clean state. Execute EVERY QA scenario from EVERY task. Test cross-task integration. Test edge cases: empty state, invalid input. Verify no Math.random() remains (`grep -r "Math.random" src/components/generators/`). Save to `.sisyphus/evidence/final-qa/`.
Output: `Scenarios [N/N pass] | Integration [N/N] | Math.random [CLEAN/N found] | VERDICT`
- [ ] F4. **Scope Fidelity Check** — `deep`
- [x] F4. **Scope Fidelity Check** — `deep`
For each task: read "What to do", read actual diff (git log/diff). Verify 1:1 — everything in spec was built, nothing beyond spec was built. Check "Must NOT do" compliance. Detect cross-task contamination. Flag unaccounted changes.
Output: `Tasks [N/N compliant] | Contamination [CLEAN/N issues] | Unaccounted [CLEAN/N files] | VERDICT`
@@ -14,7 +14,7 @@ const travelLabel = isRu ? "Путешествия" : "Travel";
const activitiesLabel = isRu ? "Активности" : "Activities";
const objectsLabel = isRu ? "Предметы" : "Objects";
const symbolsLabel = isRu ? "Символы" : "Symbols";
const clickToCopyLabel = isRu ? "Нажмите, чтобы скопировать" : "Click to copy";
---
<div id="emoji-generator" class="mt-8">
@@ -137,7 +137,6 @@ const clickToCopyLabel = isRu ? "Нажмите, чтобы скопироват
<script>
import { createErrorDisplay } from "@/lib/client/validation";
import { CopyFeedback } from "@/lib/client/clipboard";
import { popElement } from "@/lib/client/animations";
import { shuffleArray } from "@/lib/client/random";
import { getClientLang, getClientT } from "@/lib/client/i18n";
@@ -617,7 +616,7 @@ const clickToCopyLabel = isRu ? "Нажмите, чтобы скопироват
const emojis = getRandomEmojis(countVal, category);
resultEl.innerHTML = "";
emojis.forEach((emoji, i) => {
emojis.forEach((emoji) => {
const card = createEmojiCard(emoji);
resultEl.appendChild(card);
// Stagger pop animation
@@ -309,15 +309,13 @@ const i18n = {
let currentBody: Font | null = null;
let headingLocked = false;
let bodyLocked = false;
let loadedFonts = new Set<string>();
const loadedFonts = new Set<string>();
function randomItem<T>(arr: T[]): T {
return arr[randomInt(0, arr.length - 1)];
}
function getGoogleFontsUrl(heading: Font, body: Font): string {
const headingFamily = heading.apiName.split(":")[0];
const bodyFamily = body.apiName.split(":")[0];
return `https://fonts.googleapis.com/css2?family=${heading.apiName}&family=${body.apiName}&display=swap`;
}
@@ -340,7 +338,6 @@ const i18n = {
const lockedIconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-accent"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 9.9-1"/><circle cx="12" cy="16" r="1"/></svg>`;
const unlockedIconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-zinc-500"><rect width="18" height="11" x="3" y="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/><circle cx="12" cy="16" r="1"/></svg>`;
const copyIconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>`;
const checkIconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="text-accent"><path d="M20 6 9 17l-5-5"/></svg>`;
function render() {
@@ -525,9 +525,6 @@ const isRu = Astro.url.pathname.startsWith("/ru");
const result = currentResults[i];
if (!result) return;
const copyBtn = card.querySelector(".hash-copy-btn") as HTMLButtonElement;
const copyIcon = card.querySelector(".hash-copy-icon") as HTMLSpanElement;
const checkIcon = card.querySelector(".hash-check-icon") as HTMLSpanElement;
const copyLabel = card.querySelector(".hash-copy-label") as HTMLSpanElement;
if (copyBtn) {
const formatted = formatHash(result.hash);
// Clone to remove old listeners
@@ -341,12 +341,6 @@ const copiedLabel = isRu ? "Скопировано" : "Copied";
sessionStorage.setItem(HISTORY_KEY, JSON.stringify(h.slice(0, 5)));
}
function getTypeLabel(type: AnswerType): string {
if (type === "positive") return isRu ? "Положительный" : "Positive";
if (type === "neutral") return isRu ? "Нейтральный" : "Neutral";
return isRu ? "Отрицательный" : "Negative";
}
function getTypeDotClass(type: AnswerType): string {
if (type === "positive") return "bg-blue-500";
if (type === "neutral") return "bg-yellow-500";
@@ -7,19 +7,6 @@ const itemsPlaceholder = isRu
? "Алиса\nБоб\nКарол\nДэвид"
: "Alice\nBob\nCarol\nDavid";
const teamCountLabel = isRu ? "Количество команд" : "Number of teams";
const teamPrefix = isRu ? "Команда" : "Team";
const errAddTwo = isRu
? "Добавьте хотя бы 2 участника."
: "Add at least 2 participants.";
const errTeamsMin = isRu
? "Минимум 2 команды."
: "Minimum 2 teams.";
const errTeamsMax = isRu
? "Максимум 20 команд."
: "Maximum 20 teams.";
const errMorePlayers = isRu
? "Участников должно быть больше, чем команд."
: "Participants must outnumber teams.";
---
<div id="teams-generator" class="mt-8">