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:
+22
-14
@@ -6,9 +6,9 @@
|
|||||||
"work_id": "critical-refactor-f063daf0",
|
"work_id": "critical-refactor-f063daf0",
|
||||||
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/critical-refactor.md",
|
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/critical-refactor.md",
|
||||||
"plan_name": "critical-refactor",
|
"plan_name": "critical-refactor",
|
||||||
"status": "active",
|
"status": "completed",
|
||||||
"started_at": "2026-05-13T16:25:19.266Z",
|
"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": [
|
"session_ids": [
|
||||||
"ses_1de6ede59ffexUwt5C0sddEWwR"
|
"ses_1de6ede59ffexUwt5C0sddEWwR"
|
||||||
],
|
],
|
||||||
@@ -138,20 +138,24 @@
|
|||||||
"task_key": "final-wave:f1",
|
"task_key": "final-wave:f1",
|
||||||
"task_label": "F1",
|
"task_label": "F1",
|
||||||
"task_title": "**Plan Compliance Audit** — `oracle`",
|
"task_title": "**Plan Compliance Audit** — `oracle`",
|
||||||
"session_id": "ses_1dd87fa77ffeCCXDWcF5U1YmgA",
|
"session_id": "ses_1dd81d9e1ffeclA0rP510AXfNB",
|
||||||
"agent": "Sisyphus-Junior",
|
"agent": "Sisyphus-Junior",
|
||||||
"category": "quick",
|
"category": "deep",
|
||||||
"started_at": "2026-05-13T17:47:58.486Z",
|
"started_at": "2026-05-13T17:47:58.486Z",
|
||||||
"status": "running",
|
"status": "completed",
|
||||||
"updated_at": "2026-05-13T17:58:23.831Z"
|
"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",
|
"active_plan": "/home/emil/Desktop/Coding/AI/Randify.pro/.sisyphus/plans/critical-refactor.md",
|
||||||
"started_at": "2026-05-13T16:25:19.266Z",
|
"started_at": "2026-05-13T16:25:19.266Z",
|
||||||
"status": "active",
|
"status": "completed",
|
||||||
"updated_at": "2026-05-13T17:58:23.831Z",
|
"updated_at": "2026-05-13T18:03:08.059Z",
|
||||||
"session_ids": [
|
"session_ids": [
|
||||||
"ses_1de6ede59ffexUwt5C0sddEWwR"
|
"ses_1de6ede59ffexUwt5C0sddEWwR"
|
||||||
],
|
],
|
||||||
@@ -281,13 +285,17 @@
|
|||||||
"task_key": "final-wave:f1",
|
"task_key": "final-wave:f1",
|
||||||
"task_label": "F1",
|
"task_label": "F1",
|
||||||
"task_title": "**Plan Compliance Audit** — `oracle`",
|
"task_title": "**Plan Compliance Audit** — `oracle`",
|
||||||
"session_id": "ses_1dd87fa77ffeCCXDWcF5U1YmgA",
|
"session_id": "ses_1dd81d9e1ffeclA0rP510AXfNB",
|
||||||
"agent": "Sisyphus-Junior",
|
"agent": "Sisyphus-Junior",
|
||||||
"category": "quick",
|
"category": "deep",
|
||||||
"started_at": "2026-05-13T17:47:58.486Z",
|
"started_at": "2026-05-13T17:47:58.486Z",
|
||||||
"status": "running",
|
"status": "completed",
|
||||||
"updated_at": "2026-05-13T17:58:23.831Z"
|
"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
|
||||||
}
|
}
|
||||||
@@ -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.
|
> 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.
|
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`
|
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.
|
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`
|
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/`.
|
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`
|
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.
|
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`
|
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 activitiesLabel = isRu ? "Активности" : "Activities";
|
||||||
const objectsLabel = isRu ? "Предметы" : "Objects";
|
const objectsLabel = isRu ? "Предметы" : "Objects";
|
||||||
const symbolsLabel = isRu ? "Символы" : "Symbols";
|
const symbolsLabel = isRu ? "Символы" : "Symbols";
|
||||||
const clickToCopyLabel = isRu ? "Нажмите, чтобы скопировать" : "Click to copy";
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div id="emoji-generator" class="mt-8">
|
<div id="emoji-generator" class="mt-8">
|
||||||
@@ -137,7 +137,6 @@ const clickToCopyLabel = isRu ? "Нажмите, чтобы скопироват
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { createErrorDisplay } from "@/lib/client/validation";
|
import { createErrorDisplay } from "@/lib/client/validation";
|
||||||
import { CopyFeedback } from "@/lib/client/clipboard";
|
|
||||||
import { popElement } from "@/lib/client/animations";
|
import { popElement } from "@/lib/client/animations";
|
||||||
import { shuffleArray } from "@/lib/client/random";
|
import { shuffleArray } from "@/lib/client/random";
|
||||||
import { getClientLang, getClientT } from "@/lib/client/i18n";
|
import { getClientLang, getClientT } from "@/lib/client/i18n";
|
||||||
@@ -617,7 +616,7 @@ const clickToCopyLabel = isRu ? "Нажмите, чтобы скопироват
|
|||||||
const emojis = getRandomEmojis(countVal, category);
|
const emojis = getRandomEmojis(countVal, category);
|
||||||
|
|
||||||
resultEl.innerHTML = "";
|
resultEl.innerHTML = "";
|
||||||
emojis.forEach((emoji, i) => {
|
emojis.forEach((emoji) => {
|
||||||
const card = createEmojiCard(emoji);
|
const card = createEmojiCard(emoji);
|
||||||
resultEl.appendChild(card);
|
resultEl.appendChild(card);
|
||||||
// Stagger pop animation
|
// Stagger pop animation
|
||||||
|
|||||||
@@ -309,15 +309,13 @@ const i18n = {
|
|||||||
let currentBody: Font | null = null;
|
let currentBody: Font | null = null;
|
||||||
let headingLocked = false;
|
let headingLocked = false;
|
||||||
let bodyLocked = false;
|
let bodyLocked = false;
|
||||||
let loadedFonts = new Set<string>();
|
const loadedFonts = new Set<string>();
|
||||||
|
|
||||||
function randomItem<T>(arr: T[]): T {
|
function randomItem<T>(arr: T[]): T {
|
||||||
return arr[randomInt(0, arr.length - 1)];
|
return arr[randomInt(0, arr.length - 1)];
|
||||||
}
|
}
|
||||||
|
|
||||||
function getGoogleFontsUrl(heading: Font, body: Font): string {
|
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`;
|
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 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 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>`;
|
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() {
|
function render() {
|
||||||
|
|||||||
@@ -525,9 +525,6 @@ const isRu = Astro.url.pathname.startsWith("/ru");
|
|||||||
const result = currentResults[i];
|
const result = currentResults[i];
|
||||||
if (!result) return;
|
if (!result) return;
|
||||||
const copyBtn = card.querySelector(".hash-copy-btn") as HTMLButtonElement;
|
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) {
|
if (copyBtn) {
|
||||||
const formatted = formatHash(result.hash);
|
const formatted = formatHash(result.hash);
|
||||||
// Clone to remove old listeners
|
// Clone to remove old listeners
|
||||||
|
|||||||
@@ -341,12 +341,6 @@ const copiedLabel = isRu ? "Скопировано" : "Copied";
|
|||||||
sessionStorage.setItem(HISTORY_KEY, JSON.stringify(h.slice(0, 5)));
|
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 {
|
function getTypeDotClass(type: AnswerType): string {
|
||||||
if (type === "positive") return "bg-blue-500";
|
if (type === "positive") return "bg-blue-500";
|
||||||
if (type === "neutral") return "bg-yellow-500";
|
if (type === "neutral") return "bg-yellow-500";
|
||||||
|
|||||||
@@ -7,19 +7,6 @@ const itemsPlaceholder = isRu
|
|||||||
? "Алиса\nБоб\nКарол\nДэвид"
|
? "Алиса\nБоб\nКарол\nДэвид"
|
||||||
: "Alice\nBob\nCarol\nDavid";
|
: "Alice\nBob\nCarol\nDavid";
|
||||||
const teamCountLabel = isRu ? "Количество команд" : "Number of teams";
|
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">
|
<div id="teams-generator" class="mt-8">
|
||||||
|
|||||||
Reference in New Issue
Block a user