From 1b7d95284d16bfe1058e44b61d405632353fb9a3 Mon Sep 17 00:00:00 2001 From: ChanminK Date: Sun, 30 Nov 2025 21:49:03 -0500 Subject: [PATCH 1/7] think --- chris_thoughts.txt | 80 --------------------------------------- zthoughts/Chris_Notes.txt | 26 +++++++++++++ zthoughts/TODO.txt | 42 ++++++++++++++++++++ 3 files changed, 68 insertions(+), 80 deletions(-) delete mode 100644 chris_thoughts.txt create mode 100644 zthoughts/Chris_Notes.txt create mode 100644 zthoughts/TODO.txt diff --git a/chris_thoughts.txt b/chris_thoughts.txt deleted file mode 100644 index 49eaf44..0000000 --- a/chris_thoughts.txt +++ /dev/null @@ -1,80 +0,0 @@ -Alright tongue if you're seeing this here's my general thoughts/things I noticied after working with yo milkyway -Why does svelete fight with me at every possible corner - - Use up-to-date versions of npm installs - - Not sure oh how you're running things but i've got like 30 errors from stuff having the "any" type - -Also added zod -Need to double check where/how its used - -admin emails are those with @hackclub.com in them, -may just make it a field in the airtable if you get/need reviewers - -MADE history + review, dont use em tho - -uhhh i made the backend blackhole like 3 times to make it work better -i'm dead inside :D - -time for another rework :sob: - -IM AN IDIOT YIPPIEEEE - -im gonna go crazy here -especially since that THING SHOULD WORKED BUT OF COURSE IT DIDNT - -finally linked it sob -FINALLY IT HALF WORKS AOID HOASHNFUAF BAJ FK -and i get more problems i wanna cry - -NEW AIRTABLE STUFF - User - added new view(BlackholeSubmission) - BlackholeSubmissions - new table with fields - submission_number - User(from user table) - username(from user table) - Project(from projects table) - Status (approved/rejected/pending) - CoinsSpent(10) - CoinsBefore - CoinsAfter - HackatimeHoursAtSubmission - StellarshipsAtSubmission - Reviewer(uhh probably gonna link this to user so auth works) - Reason - -Current reviewer page works so that the browser you use will be - marked as trusted (very basic rn will change it soon) - -need an env variable called REVIEWER_PASSWORD - - Is the password for the reviewer page - -I'll make the system work so that we can use the airtable - field called "permissions" thats already made(gonna change the type tho) - -Now gonna make art :/ - -2 art pieces that I need to make - blackhole symbol(on the home page... idk make it a seperate tab instead?) - probably below the referal pages would be best - blackhole background(well y'know what this is) - -I'm gonna crash out - Why does clip studio do this to me tho - -need to check the package-lock's so that the pnmp install, and make sure that vetsion conflicts dont exist - -i need to update the entire project so that it works on the most recent version of svelete... - how many files are even in this project :sob: - -after looking through there are two main problems: - - This kinda thing: - __ does not exist on type 'Object' - Parameter '__' implicitly has an 'any' type. - - OR: - other extensions/import - -PHYSICS TEST LETS GOOOOOOOOOOOOOOO -now need to ge the man stuff fixed \ No newline at end of file diff --git a/zthoughts/Chris_Notes.txt b/zthoughts/Chris_Notes.txt new file mode 100644 index 0000000..32de3f3 --- /dev/null +++ b/zthoughts/Chris_Notes.txt @@ -0,0 +1,26 @@ +Notes for da tongue: + +Imported ZOD + +Added Airtable stuff: + User - added new view(BlackholeSubmission) + BlackholeSubmissions - new table with fields + submission_number + User(from user table) + username(from user table) + Project(from projects table) + Status (approved/rejected/pending) + CoinsSpent(10) + CoinsBefore + CoinsAfter + HackatimeHoursAtSubmission + StellarshipsAtSubmission + Reviewer(uhh probably gonna link this to user so auth works) + Reason + +Added env variables: + REVIEWER_PASSWORD + password for reviewer page + gonna change to use field "permissions" thats made + PUBLIC_SHOW_BLACKHOLE + true/false to let others see blackhole diff --git a/zthoughts/TODO.txt b/zthoughts/TODO.txt new file mode 100644 index 0000000..c35fbf4 --- /dev/null +++ b/zthoughts/TODO.txt @@ -0,0 +1,42 @@ +TODO pageee (in list of importance): + +CONFICT ERRORS WITH PR #17 + - Probably bc library version conflicts + - + +Blackhole page: + - Need to add "check submission page" so users can check their submissions + - Make sure ppl cant submit again + - check airtable fields + - Change current comments so it explains more + - Make justification box a bit lighter(text font) + - Check sentry[bot] errors + - appearntly approve doesnt work? + - Add animations to: + - submitting creature + - switching pages from start to submit + - + +Reviewer page: + - Need to use "permissions" to let reviewers review + - Get rid of/stop using REVIEWER_PASSWORD? + - Similar to siege reviews... + - Fraud review + Github repo + Itch page + Slack msg + - Attach to bot? + - check siege bot + page(but it is rails...) + - Fix the entire system sob + - Rating/review system... TALK TO TONGYU ABOUT WHAT SHE WANTS + - Make it look good!!! + - + +ZOD + - Sentry had some probelms with it... + - Double check where it is + add to places its needed + +Notes on updating repo: + Use up-to-date versions of npm installs + need to check the package-lock's so that the pnmp install, and make sure that vetsion conflicts dont exist + + __ does not exist on type 'Object' + Parameter '__' implicitly has an 'any' type. + gotta check other extensions/imports From ebcd2f24d27ea05780d6174e8f7b0d5cb6dda0e1 Mon Sep 17 00:00:00 2001 From: ChanminK Date: Tue, 2 Dec 2025 17:14:44 -0500 Subject: [PATCH 2/7] quick fix --- src/lib/server/blackhole.js | 56 +++++-- src/routes/blackhole/+page.svelte | 52 ++++-- .../blackhole/submissions/+page.server.js | 24 +++ src/routes/blackhole/submissions/+page.svelte | 152 ++++++++++++++++++ 4 files changed, 256 insertions(+), 28 deletions(-) create mode 100644 src/routes/blackhole/submissions/+page.server.js create mode 100644 src/routes/blackhole/submissions/+page.svelte diff --git a/src/lib/server/blackhole.js b/src/lib/server/blackhole.js index d37957d..94e77ad 100644 --- a/src/lib/server/blackhole.js +++ b/src/lib/server/blackhole.js @@ -17,7 +17,7 @@ const MIN_HOURS_REQUIRED = 25; export const blackholeSubmitSchema = z.object({ username: z.string().min(1, 'username is required'), projectId: z.string().min(1, 'projectId is required'), - justification: z.string().optional() + justification: z.string().max(2000).optional() }); export const blackholeModerateSchema = z.object({ @@ -101,6 +101,7 @@ function normalizeSubmission(record) { coinsAfter: f.CoinsAfter ?? null, hackatimeHours: f.HackatimeHoursAtSubmission ?? null, stellarshipsAtSubmission: f.StellarshipsAtSubmission ?? null, + justification: f.Justification ?? null, reviewer: f.Reviewer ?? null, reason: f.Reason ?? null, justification: f.Justification ?? null, @@ -127,6 +128,30 @@ async function getNextSubmissionNumber() { return Number(lastNum) + 1; } +/** + * @param {string} userRecordId + * @param {string} projectRecordId + * @returns {Promise} + */ +async function hasActiveSubmission(userRecordId, projectRecordId) { + const escapedUser = escapeAirtableFormula(userRecordId); + const escapedProject = escapeAirtableFormula(projectRecordId); + + const records = await base(BLACKHOLE_TABLE) + .select({ + filterByFormula: ` + AND( + FIND("${escapedUser}", ARRAYJOIN({User}, ",")), + FIND("${escapedProject}", ARRAYJOIN({Project}, ",")), + OR({Status} = "pending", {Status} = "approved") + ) + ` + }) + .firstPage(); + + return records.length > 0; +} + /** * submittin @@ -136,11 +161,6 @@ async function getNextSubmissionNumber() { export async function submitToBlackhole(rawInput) { const { username, projectId, justification } = blackholeSubmitSchema.parse(rawInput); - // Require justification - if (!justification || !justification.trim()) { - throw new Error('Please explain why your project deserves a stellar ship'); - } - const user = await getUserbyUsername(username); if (!user) { throw new Error('User not found'); @@ -162,15 +182,21 @@ export async function submitToBlackhole(rawInput) { // ASSERT DOMINANCE assertProjectOwnership(project, user); - // Check if project has already been submitted to blackhole - const existingSubmissions = await base(BLACKHOLE_TABLE) - .select({ - filterByFormula: `FIND("${projectId}", ARRAYJOIN({Project}, ","))` - }) - .firstPage(); + //Checking if submitted + const alreadySubmitted = await hasActiveSubmission(user.id, project.id); + if (alreadySubmitted) { + throw new Error( + 'This project already has a pending or approved black hole submission.' + ); + } + - if (existingSubmissions.length > 0) { - throw new Error('This project has already been submitted to the black hole'); + //Checking if submitted + const alreadySubmitted = await hasActiveSubmission(user.id, project.id); + if (alreadySubmitted) { + throw new Error( + 'This project already has a pending or approved black hole submission.' + ); } // Hackatime hours @@ -202,6 +228,8 @@ export async function submitToBlackhole(rawInput) { StellarshipsAtSubmission: stellarships, submissionNumber, Justification: justification ?? '' + submissionNumber, + Justification: justification ?? '' }); await base(USER_TABLE).update(user.id, { diff --git a/src/routes/blackhole/+page.svelte b/src/routes/blackhole/+page.svelte index ee4b134..fa691a5 100644 --- a/src/routes/blackhole/+page.svelte +++ b/src/routes/blackhole/+page.svelte @@ -173,6 +173,27 @@ loading = false; } } + + let availableProjects = projects; + + $: { + const blocked = new Set( + submissions + .filter( + (s: any) => s && (s.status === 'pending' || s.status === 'approved') + ) + .map((s: any) => s.projectId) + ); + + availableProjects = projects.filter((p: any) => { + const pid = p.id ?? p.projectid; + return !blocked.has(pid); + }); + + if (!availableProjects.find((p: any) => p.id === selectedProjectId)) { + selectedProjectId = availableProjects[0]?.id ?? ''; + } + } @@ -228,8 +249,10 @@

- if your creature makes it out — congrats, you've got a stellar ship!
- if it doesn't — it will walk shamefully back home. (don't worry, it won't die.) + The black how is how your creature(project) proves itself.
+ If it makes it out, you earn a stellar ship - a sign that your project + is polished, playabel, and loved by players.
+ If it doesn't it'll walk shamefully back home. (don't worry, it won't die.)

@@ -262,14 +285,11 @@

choose your project

- {#if !shippedProjects || shippedProjects.length === 0} -

ship a project first.

- + {#if !availableProjects || availableProjects.length === 0} +

you don't have any creatures avalible to submit right now.w

{:else}
- {#each shippedProjects as p} + {#each availableProjects as p} {#if p} {@const submission = submissions.find((s: any) => s.projectId === p.id)} {@const isSubmitted = !!submission} @@ -649,12 +669,16 @@ } .explanation-box { - max-width: 640px; - margin: 0 auto 1rem; - padding: 0.75rem; - border-radius: 0.75rem; - border: 1px solid rgba(255, 255, 255, 0.4); /* lighter border */ - background: rgba(0, 0, 0, 0.3); /* lighter box */ + width: 100%; + min-height: 90px; + border: none; + outline: none; + resize: vertical; + background: transparent; + color: #eaeaea; + font-size: 0.9rem; + line-height: 1.4; + font-weight: 300; } .explanation-box textarea { diff --git a/src/routes/blackhole/submissions/+page.server.js b/src/routes/blackhole/submissions/+page.server.js new file mode 100644 index 0000000..6fd2bcc --- /dev/null +++ b/src/routes/blackhole/submissions/+page.server.js @@ -0,0 +1,24 @@ +import { redirect, error } from '@sveltejs/kit'; +import { PUBLIC_SHOW_BLACKHOLE } from '$env/static/public'; +import { sanitizeUserForFrontend } from '$lib/server/auth'; +import { getMyBlackholeSubmissions } from '$lib/server/blackhole.js'; + +export async function load({ locals }) { + if (PUBLIC_SHOW_BLACKHOLE !== 'true') { + throw redirect(302, '/home'); + } + + if (!locals.user) throw redirect(302, '/'); + + const username = locals.user.username; + if (!username) { + throw error(400, 'User profile incomplete'); + } + + const submissions = await getMyBlackholeSubmissions(username); + + return { + user: sanitizeUserForFrontend(locals.user), + submissions + }; +} diff --git a/src/routes/blackhole/submissions/+page.svelte b/src/routes/blackhole/submissions/+page.svelte new file mode 100644 index 0000000..c69993d --- /dev/null +++ b/src/routes/blackhole/submissions/+page.svelte @@ -0,0 +1,152 @@ + + + + Black Hole Submissions + + +
+

your black hole submissions

+ +

+ logged in as {user.username ?? 'unknown'} +

+ + > back to black hole + + {#if !submissions || submissions.length === 0} +

you haven’t submitted any creatures yet.

+ {:else} +
+ {#each submissions as s} +
+
+ project + {s.projectId} +
+
+ status + + {formatStatus(s.status)} + +
+
+ coins spent + {s.coinsSpent ?? 0} +
+ {#if s.hackatimeHours != null} +
+ hours at submission + {s.hackatimeHours} +
+ {/if} + {#if s.reason} +
+ review notes + {s.reason} +
+ {/if} + {#if s.justification} +
+ justification + {s.justification} +
+ {/if} +
+ {/each} +
+ {/if} +
+ + From 7985d0121e43ad50986a51288043a04183b51d03 Mon Sep 17 00:00:00 2001 From: ChanminK Date: Wed, 3 Dec 2025 15:40:15 -0500 Subject: [PATCH 3/7] uhh need to pr --- zthoughts/TODO.txt | 10 +++++-- zthoughts/error.txt | 69 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 zthoughts/error.txt diff --git a/zthoughts/TODO.txt b/zthoughts/TODO.txt index c35fbf4..9d7c33b 100644 --- a/zthoughts/TODO.txt +++ b/zthoughts/TODO.txt @@ -2,7 +2,11 @@ TODO pageee (in list of importance): CONFICT ERRORS WITH PR #17 - Probably bc library version conflicts - - + - Coolify server error: + - + - multiple loc files apparently? + - Double check that + - Blackhole page: - Need to add "check submission page" so users can check their submissions @@ -11,7 +15,7 @@ Blackhole page: - Change current comments so it explains more - Make justification box a bit lighter(text font) - Check sentry[bot] errors - - appearntly approve doesnt work? + - apparently approve doesnt work? - Add animations to: - submitting creature - switching pages from start to submit @@ -21,7 +25,7 @@ Reviewer page: - Need to use "permissions" to let reviewers review - Get rid of/stop using REVIEWER_PASSWORD? - Similar to siege reviews... - - Fraud review + Github repo + Itch page + Slack msg + - Fraud review + Github repo + Itch game page + Slack User ID - Attach to bot? - check siege bot + page(but it is rails...) - Fix the entire system sob diff --git a/zthoughts/error.txt b/zthoughts/error.txt new file mode 100644 index 0000000..7ba37e7 --- /dev/null +++ b/zthoughts/error.txt @@ -0,0 +1,69 @@ +Small collection of the errors: + + +#10 1.067 specifiers in the lockfile don't match specifiers in package.json: +2025-Nov-29 10:13:50.460293 +#10 1.067 * 1 dependencies were added: zod@^4.1.12 +2025-Nov-29 10:13:50.460293 +#10 1.067 * 6 dependencies are mismatched: +2025-Nov-29 10:13:50.460293 +#10 1.067 - @sveltejs/adapter-auto (lockfile: ^6.0.0, manifest: ^6.1.0) +2025-Nov-29 10:13:50.460293 +#10 1.067 - @sveltejs/kit (lockfile: ^2.22.0, manifest: ^2.48.4) +2025-Nov-29 10:13:50.460293 +#10 1.067 - @sveltejs/vite-plugin-svelte (lockfile: ^6.0.0, manifest: ^6.2.0) +2025-Nov-29 10:13:50.460293 +#10 1.067 - @types/node (lockfile: ^22, manifest: ^22 +.18.6) +2025-Nov-29 10:13:50.460293 +#10 1.067 - svelte (lockfile: ^5.0.0, manifest: ^5.39.2) +2025-Nov-29 10:13:50.460293 +#10 1.067 - vite (lockfile: ^7.0.4, manifest: ^7.1.6) +2025-Nov-29 10:13:50.460293 +#10 1.067 +2025-Nov-29 10:13:50.460293 +#10 ERROR: process "/bin/sh -c pnpm install --frozen-lockfile" did not complete successfully: exit code: 1 +2025-Nov-29 10:13:50.460293 +------ +2025-Nov-29 10:13:50.460293 +> [builder 5/7] RUN pnpm install --frozen-lockfile: +2025-Nov-29 10:13:50.460293 +1.067 specifiers in the lockfile don't match specifiers in package.json: +2025-Nov-29 10:13:50.460293 +1.067 * 1 dependencies were added: zod@^4.1.12 +2025-Nov-29 10:13:50.460293 +1.067 * 6 dependencies are mismatched: +2025-Nov-29 10:13:50.460293 +1.067 - @sveltejs/adapter-auto (lockfile: ^6.0.0, manifest: ^6.1.0) +2025-Nov-29 10:13:50.460293 +1.067 - @sveltejs/kit (lockfile: ^2.22.0, manifest: ^2.48.4) +2025-Nov-29 10:13:50.460293 +1.067 - @sveltejs/vite-plugin-svelte (lockfile: ^6.0.0, manifest: ^6.2.0) +2025-Nov-29 10:13:50.460293 +1.067 - @types/node (lockfile: ^22, manifest: ^22.18.6) +2025-Nov-29 10:13:50.460293 +1.067 - svelte (lockfile: ^5.0.0, manifest: ^5.39.2) +2025-Nov-29 10:13:50.460293 +1.067 - vite (lockfile: ^7.0.4, manifest: ^7.1.6) +2025-Nov-29 10:13:50.460293 +1.067 +2025-Nov-29 10:13:50.460293 +------ +2025-Nov-29 10:13:50.460293 +2025-Nov-29 10:13:50.460293 +3 warnings found (use docker --debug to expand): +2025-Nov-29 10:13:50.460293 +- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "AIRTABLE_API_KEY") (line 6) +2025-Nov-29 10:13:50.460293 +- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "STATS_API_KEY") (line 2) +2025-Nov-29 10:13:50.460293 +- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "IDV_KEY") (line 3) +2025-Nov-29 10:13:50.460293 +Dockerfile:10 +2025-Nov-29 10:13:50.460293 + + +ERROR: failed to build: failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile" did not complete successfully: exit code: 1 + +Failed deployment... +:sad face: \ No newline at end of file From 8a817764810dc9960752fa6bef1c8b0ca939cb8e Mon Sep 17 00:00:00 2001 From: ChanminK Date: Wed, 3 Dec 2025 23:43:02 -0500 Subject: [PATCH 4/7] going to rebase --- zthoughts/TODO.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/zthoughts/TODO.txt b/zthoughts/TODO.txt index 9d7c33b..8daaffc 100644 --- a/zthoughts/TODO.txt +++ b/zthoughts/TODO.txt @@ -1,12 +1,11 @@ TODO pageee (in list of importance): CONFICT ERRORS WITH PR #17 - - Probably bc library version conflicts - - Coolify server error: - - - - multiple loc files apparently? - - Double check that - - + - Coolify server error(essentially sentry): + - check error.txt + - (Zod) " it didn’t install zod in the requirements" + - Apparently bc subitting images? + - AUGHYAHUDD TONGUE ALREADY FIXED WHAT I WAS TRYING TO DO :sob: Blackhole page: - Need to add "check submission page" so users can check their submissions From 85ffb14c504bf7185d0d92f6c9025daa1378da0c Mon Sep 17 00:00:00 2001 From: ChanminK Date: Sun, 4 Jan 2026 06:34:04 -0500 Subject: [PATCH 5/7] am so confused --- data/output/vscode-heartbeats.ndjson | 298 ++++++++++++++++++ src/lib/server/blackhole.js | 5 +- src/lib/server/review.js | 104 ++++++ src/routes/blackhole/+page.svelte | 2 - .../reviewer/project/[id]/+page.server.js | 28 ++ src/routes/reviewer/project/[id]/+page.svelte | 121 +++++++ zthoughts/TODO.txt | 35 +- zthoughts/error.txt | 85 ++--- 8 files changed, 583 insertions(+), 95 deletions(-) create mode 100644 data/output/vscode-heartbeats.ndjson create mode 100644 src/lib/server/review.js create mode 100644 src/routes/reviewer/project/[id]/+page.server.js create mode 100644 src/routes/reviewer/project/[id]/+page.svelte diff --git a/data/output/vscode-heartbeats.ndjson b/data/output/vscode-heartbeats.ndjson new file mode 100644 index 0000000..cb59fd4 --- /dev/null +++ b/data/output/vscode-heartbeats.ndjson @@ -0,0 +1,298 @@ +{"time":"2025-12-12T21:29:57.211Z","project":"milkyway","language":"json","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\package.json","line":24,"col":24,"lines":53,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:34.222Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:34.227Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:34.443Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:34.987Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.156Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.233Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.323Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.403Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":10,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.835Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:35.997Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:36.557Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:37.462Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:37.636Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:37.739Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:37.850Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:37.956Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.052Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.170Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.250Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.322Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.451Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.555Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.721Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.825Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:38.960Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:39.984Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:40.272Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:40.292Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:40.592Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:40.712Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:40.824Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:41.679Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:41.808Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:45.413Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":0,"col":0,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.295Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":1,"col":1,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.359Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":1,"col":1,"lines":93,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.428Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":8,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.443Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":8,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.519Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":8,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.914Z","project":"milkyway","language":"plaintext","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\zthoughts\\error.txt","line":0,"col":0,"lines":26,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:51.981Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":26,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:30:53.255Z","project":"milkyway","language":"plaintext","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\zthoughts\\error.txt.git","line":13,"col":1,"lines":26,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:07.215Z","project":"milkyway","language":"json","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\package.json","line":8,"col":1,"lines":53,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:22.910Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":0,"col":0,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:26.832Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":1,"col":1,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:26.864Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":1,"col":1,"lines":93,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:26.893Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:26.896Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:26.977Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.011Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.028Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.046Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.062Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.081Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.096Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.113Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.137Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.197Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.216Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.249Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.272Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.278Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.294Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.420Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.480Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.506Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.523Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.546Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.621Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.646Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.662Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.679Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.698Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.707Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.722Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.735Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.765Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.795Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.830Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:27.984Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:28.192Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":10,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:28.367Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:28.463Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:28.559Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:29.275Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:29.278Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-12T21:46:29.280Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:04:57.772Z","project":"milkyway","language":"json","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\package.json","line":92,"col":11,"lines":53,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:08.615Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:08.722Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:08.829Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:08.979Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:09.073Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:09.148Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:09.384Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:09.899Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:09.985Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.121Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.201Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.298Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.386Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.473Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.590Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.666Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.763Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:10.857Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:11.185Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:11.682Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:11.697Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:11.833Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":30,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.280Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":32,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.782Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":31,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.813Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":30,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.861Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.892Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.921Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.955Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:19.987Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.018Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.049Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.080Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.114Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.157Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.187Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.219Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.251Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.282Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.315Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.349Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.521Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.626Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.729Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.825Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":10,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:20.914Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:21.048Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:21.146Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:23.980Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":89,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:23.982Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":89,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:23.986Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":89,"col":1,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:28.078Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":0,"col":0,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.144Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":1,"col":1,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.295Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":11,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.305Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":11,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.362Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":12,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.427Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":13,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:34.462Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":14,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:36.469Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":17,"col":1,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:36.476Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":17,"col":1,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:36.480Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":17,"col":1,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:05:40.383Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":1,"col":1,"lines":93,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:42.421Z","project":"milkyway","language":"scminput","editor":"vscode","filePath":"git\\scm0\\input","line":18,"col":11,"lines":1,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:46.898Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":15,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:46.910Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":15,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.157Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":12,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.325Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":13,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.407Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":14,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.497Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":15,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.587Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":16,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.683Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":17,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.763Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":18,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.861Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":19,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:47.896Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":20,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.123Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":21,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.256Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":22,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.306Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":23,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.529Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":24,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.580Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":25,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.709Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":26,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.748Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":27,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.791Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":28,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.812Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":29,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.889Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":30,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:48.925Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":31,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.014Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":32,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.096Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":33,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.225Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":34,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.296Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":35,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.520Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":36,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.592Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":37,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.692Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":38,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.794Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":39,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.880Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":40,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.922Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":41,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:49.953Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":42,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:50.349Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":43,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:50.479Z","project":"milkyway","language":"json","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\package.json","line":20,"col":44,"lines":53,"write":false,"source":"fraud-test-vscode","branch":"main","category":"open","reason":"open","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:50.785Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:50.939Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":43,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.309Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.330Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.356Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":46,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.379Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":47,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.402Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":48,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.414Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":49,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.431Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":50,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.449Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":51,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.472Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":52,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.488Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":53,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.505Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":54,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.523Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":55,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:54.548Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":56,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.025Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":48,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.188Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":47,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.347Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":46,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.538Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.690Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T04:59:59.961Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":43,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:00.429Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:00.434Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:00.437Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:02.530Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":1,"col":1,"lines":93,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.085Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.088Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":6,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.273Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.370Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.835Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:08.929Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":10,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.009Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.051Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.177Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.282Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.368Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.489Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.551Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.668Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.803Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:09.954Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.083Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.193Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":22,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.314Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":23,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.379Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":24,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.500Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":25,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.571Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":26,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.698Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":27,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.786Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":28,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:10.977Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":29,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.089Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":30,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.218Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":31,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.361Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":32,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.441Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":33,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.593Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":34,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.810Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":35,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.905Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":36,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:11.978Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":37,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:12.425Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":38,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:12.593Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":39,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:12.754Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":40,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:12.906Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":41,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:13.073Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":42,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:13.234Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":43,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:14.313Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":44,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:19.578Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:19.937Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":7,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:22.541Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":1,"col":1,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:24.716Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":1,"col":1,"lines":93,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:25.238Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":93,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:25.242Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":93,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:00:25.246Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":93,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:57.276Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:57.278Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:57.690Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":21,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:57.849Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":20,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:57.977Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":19,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.081Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":18,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.194Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":17,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.280Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":16,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.401Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":15,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.497Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":14,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.609Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":13,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:58.721Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":12,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:59.041Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":11,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:59.842Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":10,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:01:59.969Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":9,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:03.313Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":92,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:06.000Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":91,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:06.003Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":91,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:06.005Z","project":"milkyway","language":"svelte","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.svelte","line":91,"col":8,"lines":93,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:06.644Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":1,"col":1,"lines":28,"write":false,"source":"fraud-test-vscode","branch":"main","category":"active","reason":"focus","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:08.573Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:08.576Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:09.410Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":46,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:09.754Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:09.930Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:10.421Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":43,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:10.523Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:10.691Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":45,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:10.921Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":46,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.004Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":47,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.074Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":48,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.138Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":49,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.298Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":50,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.346Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":51,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:11.394Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":52,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:13.481Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":43,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:13.913Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:13.916Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"coding","reason":"change","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} +{"time":"2025-12-13T05:02:13.919Z","project":"milkyway","language":"javascript","editor":"vscode","filePath":"c:\\Users\\thisi\\OneDrive\\Desktop\\Projects\\milkyway\\src\\routes\\reviewer\\project\\[id]\\+page.server.js","line":20,"col":44,"lines":28,"write":true,"source":"fraud-test-vscode","branch":"main","category":"save","reason":"save","machine":"DESKTOP-F9O0CBH","userAgent":"fraud-test-vscode/0.0.1","ip":"127.0.0.1"} diff --git a/src/lib/server/blackhole.js b/src/lib/server/blackhole.js index f468096..4cd88e8 100644 --- a/src/lib/server/blackhole.js +++ b/src/lib/server/blackhole.js @@ -7,7 +7,7 @@ import { escapeAirtableFormula } from '$lib/server/security.js'; const USER_TABLE = 'User'; const PROJECTS_TABLE = 'Projects'; const USER_BLACKHOLE_VIEW = 'BlackholeSubmission'; -const BLACKHOLE_TABLE = 'BlackholeSubmissions'; // make sure this matches your Airtable table name +const BLACKHOLE_TABLE = 'BlackholeSubmissions'; // Tongyu change dis based on what you want const SUBMISSION_COST_COINS = 10; @@ -169,7 +169,6 @@ async function hasActiveSubmission(userRecordId, projectRecordId) { return records.length > 0; } - /** * submittin * @param {any} rawInput @@ -240,8 +239,6 @@ export async function submitToBlackhole(rawInput) { StellarshipsAtSubmission: stellarships, submissionNumber, Justification: justification ?? '' - submissionNumber, - Justification: justification ?? '' }); await base(USER_TABLE).update(user.id, { diff --git a/src/lib/server/review.js b/src/lib/server/review.js new file mode 100644 index 0000000..5ffb9c3 --- /dev/null +++ b/src/lib/server/review.js @@ -0,0 +1,104 @@ +import { base } from '$lib/server/db.js'; + +const BLACKHOLE_TABLE = 'BlackholeSubmissions'; +const PROJECTS_TABLE = 'Projects' + +function mapSubmissionWithProject() { + c + c + + l + + if (projectRec) { + project = { + id: + name: + description: + promptinfo: + shipURL: + githubURL: + projectImage: + egg: + hackatimeHours: + }; + } + + return { + id: + status: + username: + userId: + projectId: + coinsSpent: + coinsBefore: + coinsAfter: + hackatimeHours: + stellarshipsAtSubmission: + justification: + reviewer: + reason: + createdTime: + }; +} + +/** + * Yes I know this is a copy of the server/blackhole.js but this does more + * @returns {Promise} + */ + +export async function getPendingBlackholeReviews() { + const records = await base(BLACKHOLE_TABLE) + .select({ + filterByFormula: `{Status} = "pending"` + }) + .all(); + + const results = []; + + for (const rec of records) { + const f = rec.fields ?? {}; + const projectId = Array.isArray(f.Project) ? f.Project[0] : null; + + let project = null; + + if (projectId) { + try { + projectRec = + } catch (e) { + console.error + } + } + + results. + } + + return results; +} + + +/** + * Getting a single submissions (any status) + * @param {} + * @returns {} + */ +export async function getBlackholeReviewById() { + try { + const + const + const + + let + if () { + try { + pr + } catch (e) { + c + } + } + + return + } catch () { + c + r + } +} diff --git a/src/routes/blackhole/+page.svelte b/src/routes/blackhole/+page.svelte index 79635fa..7daae31 100644 --- a/src/routes/blackhole/+page.svelte +++ b/src/routes/blackhole/+page.svelte @@ -202,8 +202,6 @@ } } - let availableProjects = projects; - $: { const blocked = new Set( submissions diff --git a/src/routes/reviewer/project/[id]/+page.server.js b/src/routes/reviewer/project/[id]/+page.server.js new file mode 100644 index 0000000..27115fc --- /dev/null +++ b/src/routes/reviewer/project/[id]/+page.server.js @@ -0,0 +1,28 @@ +import { error, redirect } from '@sveltejs/kit'; +import { sanitizeUserForFrontend } from '$lib/server/auth'; +import { getBlackholeReviewById } from '$lib/server/review.js'; + +export async function load({ locals, cookies, params }) { + if (!locals.user) throw redirect(302, '/'); + + const authorized = cookies.get('reviewer_auth') === '1'; + if (!authorized) { + throw redirect(302, '/reviewer'); + } + + const id = params.id; + if (!id) { + throw error(400, 'Missing submission id'); + } + + const submission = await getBlackholeReviewById(id); + if (!submission || submission.status !== 'pending') { + // could still allow viewing non-pending if ya want + throw error(404, 'Submission not found or not pending'); + } + + return { + user: sanitizeUserForFrontend(locals.user), + submission + }; +} diff --git a/src/routes/reviewer/project/[id]/+page.svelte b/src/routes/reviewer/project/[id]/+page.svelte new file mode 100644 index 0000000..9bef1ff --- /dev/null +++ b/src/routes/reviewer/project/[id]/+page.svelte @@ -0,0 +1,121 @@ + + + + Review - {submission.project?.name ?? 'Project'} + + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/zthoughts/TODO.txt b/zthoughts/TODO.txt index 8daaffc..fdddb3a 100644 --- a/zthoughts/TODO.txt +++ b/zthoughts/TODO.txt @@ -1,45 +1,30 @@ TODO pageee (in list of importance): -CONFICT ERRORS WITH PR #17 - - Coolify server error(essentially sentry): - - check error.txt - - (Zod) " it didn’t install zod in the requirements" - - Apparently bc subitting images? - - AUGHYAHUDD TONGUE ALREADY FIXED WHAT I WAS TRYING TO DO :sob: - -Blackhole page: - - Need to add "check submission page" so users can check their submissions - - Make sure ppl cant submit again - - check airtable fields - - Change current comments so it explains more - - Make justification box a bit lighter(text font) - - Check sentry[bot] errors - - apparently approve doesnt work? - - Add animations to: - - submitting creature - - switching pages from start to submit - - - Reviewer page: - Need to use "permissions" to let reviewers review + - Rating/review system... TALK TO TONGYU ABOUT WHAT SHE WANTS + - Find how levels of review ms tongyu wants - Get rid of/stop using REVIEWER_PASSWORD? - Similar to siege reviews... - Fraud review + Github repo + Itch game page + Slack User ID - Attach to bot? - check siege bot + page(but it is rails...) - Fix the entire system sob - - Rating/review system... TALK TO TONGYU ABOUT WHAT SHE WANTS - Make it look good!!! - -ZOD - - Sentry had some probelms with it... - - Double check where it is + add to places its needed - Notes on updating repo: + Still confused on what version of svelete + check lockerfile Use up-to-date versions of npm installs need to check the package-lock's so that the pnmp install, and make sure that vetsion conflicts dont exist __ does not exist on type 'Object' Parameter '__' implicitly has an 'any' type. gotta check other extensions/imports + +VSCODE tells me: + Do you want to install the recommended 'Container Tools' extension from Microsoft for the Docker language? + Double chekc this and + +Need to double check airtable variable names \ No newline at end of file diff --git a/zthoughts/error.txt b/zthoughts/error.txt index 7ba37e7..acd6b71 100644 --- a/zthoughts/error.txt +++ b/zthoughts/error.txt @@ -1,69 +1,26 @@ -Small collection of the errors: +specifiers in the lockfile don't match specifiers in package.json: +1 dependencies were added: + zod@^4.1.12 + Essentailly zod wasnt added +6 dependencies are mismatched: + @sveltejs/adapter-auto (lockfile: ^6.0.0, manifest: ^6.1.0) + @sveltejs/kit (lockfile: ^2.22.0, manifest: ^2.48.4) + @sveltejs/vite-plugin-svelte (lockfile: ^6.0.0, manifest: ^6.2.0) + @types/node (lockfile: ^22, manifest: ^22.18.6) + svelte (lockfile: ^5.0.0, manifest: ^5.39.2) + vite (lockfile: ^7.0.4, manifest: ^7.1.6) -#10 1.067 specifiers in the lockfile don't match specifiers in package.json: -2025-Nov-29 10:13:50.460293 -#10 1.067 * 1 dependencies were added: zod@^4.1.12 -2025-Nov-29 10:13:50.460293 -#10 1.067 * 6 dependencies are mismatched: -2025-Nov-29 10:13:50.460293 -#10 1.067 - @sveltejs/adapter-auto (lockfile: ^6.0.0, manifest: ^6.1.0) -2025-Nov-29 10:13:50.460293 -#10 1.067 - @sveltejs/kit (lockfile: ^2.22.0, manifest: ^2.48.4) -2025-Nov-29 10:13:50.460293 -#10 1.067 - @sveltejs/vite-plugin-svelte (lockfile: ^6.0.0, manifest: ^6.2.0) -2025-Nov-29 10:13:50.460293 -#10 1.067 - @types/node (lockfile: ^22, manifest: ^22 -.18.6) -2025-Nov-29 10:13:50.460293 -#10 1.067 - svelte (lockfile: ^5.0.0, manifest: ^5.39.2) -2025-Nov-29 10:13:50.460293 -#10 1.067 - vite (lockfile: ^7.0.4, manifest: ^7.1.6) -2025-Nov-29 10:13:50.460293 -#10 1.067 -2025-Nov-29 10:13:50.460293 -#10 ERROR: process "/bin/sh -c pnpm install --frozen-lockfile" did not complete successfully: exit code: 1 -2025-Nov-29 10:13:50.460293 ------- -2025-Nov-29 10:13:50.460293 > [builder 5/7] RUN pnpm install --frozen-lockfile: -2025-Nov-29 10:13:50.460293 -1.067 specifiers in the lockfile don't match specifiers in package.json: -2025-Nov-29 10:13:50.460293 -1.067 * 1 dependencies were added: zod@^4.1.12 -2025-Nov-29 10:13:50.460293 -1.067 * 6 dependencies are mismatched: -2025-Nov-29 10:13:50.460293 -1.067 - @sveltejs/adapter-auto (lockfile: ^6.0.0, manifest: ^6.1.0) -2025-Nov-29 10:13:50.460293 -1.067 - @sveltejs/kit (lockfile: ^2.22.0, manifest: ^2.48.4) -2025-Nov-29 10:13:50.460293 -1.067 - @sveltejs/vite-plugin-svelte (lockfile: ^6.0.0, manifest: ^6.2.0) -2025-Nov-29 10:13:50.460293 -1.067 - @types/node (lockfile: ^22, manifest: ^22.18.6) -2025-Nov-29 10:13:50.460293 -1.067 - svelte (lockfile: ^5.0.0, manifest: ^5.39.2) -2025-Nov-29 10:13:50.460293 -1.067 - vite (lockfile: ^7.0.4, manifest: ^7.1.6) -2025-Nov-29 10:13:50.460293 -1.067 -2025-Nov-29 10:13:50.460293 ------- -2025-Nov-29 10:13:50.460293 -2025-Nov-29 10:13:50.460293 -3 warnings found (use docker --debug to expand): -2025-Nov-29 10:13:50.460293 -- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "AIRTABLE_API_KEY") (line 6) -2025-Nov-29 10:13:50.460293 -- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "STATS_API_KEY") (line 2) -2025-Nov-29 10:13:50.460293 -- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "IDV_KEY") (line 3) -2025-Nov-29 10:13:50.460293 -Dockerfile:10 -2025-Nov-29 10:13:50.460293 - + specifiers in the lockfile don't match specifiers in package.json: + 1 dependencies were added: zod@^4.1.12 + 6 dependencies are mismatched(same as above) -ERROR: failed to build: failed to solve: process "/bin/sh -c pnpm install --frozen-lockfile" did not complete successfully: exit code: 1 +3 warnings found (use docker --debug to expand): + SecretsUsedInArgOrEnv: + Do not use ARG or ENV instructions for sensitive data + (ARG "STATS_API_KEY") (line 2) + (ARG "IDV_KEY") (line 3) + (ARG "AIRTABLE_API_KEY") (line 6) -Failed deployment... -:sad face: \ No newline at end of file +FIND "frozen-lockfile" \ No newline at end of file From 039128a0d0d34612531619410c61623d3e68adb0 Mon Sep 17 00:00:00 2001 From: ChanminK Date: Sun, 4 Jan 2026 06:36:37 -0500 Subject: [PATCH 6/7] i am so confused --- src/lib/server/blackhole.js | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/lib/server/blackhole.js b/src/lib/server/blackhole.js index 4cd88e8..c124300 100644 --- a/src/lib/server/blackhole.js +++ b/src/lib/server/blackhole.js @@ -109,23 +109,6 @@ function normalizeSubmission(record) { }; } -/** - * Normalize submission with project info - * @param {any} record - * @param {any} projectRecord - */ -function normalizeSubmissionWithProject(record, projectRecord) { - const submission = normalizeSubmission(record); - if (!submission) return null; - - const pf = projectRecord?.fields ?? {}; - return { - ...submission, - projectName: pf.projectname ?? pf.Name ?? 'Unknown Project', - projectEgg: pf.egg ?? null - }; -} - // core flow /** @@ -198,15 +181,6 @@ export async function submitToBlackhole(rawInput) { // ASSERT DOMINANCE assertProjectOwnership(project, user); - //Checking if submitted - const alreadySubmitted = await hasActiveSubmission(user.id, project.id); - if (alreadySubmitted) { - throw new Error( - 'This project already has a pending or approved black hole submission.' - ); - } - - //Checking if submitted const alreadySubmitted = await hasActiveSubmission(user.id, project.id); if (alreadySubmitted) { From 44f64df942732c4ee2403a374875976013c7e05e Mon Sep 17 00:00:00 2001 From: ChanminK Date: Sat, 17 Jan 2026 05:23:30 -0500 Subject: [PATCH 7/7] ts pmo --- package-lock.json | 37 +- src/lib/server/blackhole.js | 65 +-- src/lib/server/review.js | 131 +++--- src/lib/server/reviewer.js | 436 ++++++++++++++++++ .../api/auto-update-hackatime/+server.js | 120 ++--- src/routes/reviewer/+page.server.js | 53 +++ src/routes/reviewer/+page.svelte | 74 +++ src/routes/reviewer/basic/+page.server.js | 16 + src/routes/reviewer/basic/+page.svelte | 64 +++ .../reviewer/basic/[id]/+page.server.js | 17 + src/routes/reviewer/basic/[id]/+page.svelte | 179 +++++++ src/routes/reviewer/basic/vote/+server.js | 20 + src/routes/reviewer/blackhole/+page.server.js | 31 ++ src/routes/reviewer/blackhole/+page.svelte | 71 +++ .../reviewer/blackhole/[id]/+page.server.js | 19 + .../reviewer/blackhole/[id]/+page.svelte | 138 ++++++ .../reviewer/blackhole/decision/+server.js | 20 + .../reviewer/project/[id]/+page.server.js | 28 -- src/routes/reviewer/project/[id]/+page.svelte | 121 ----- src/routes/reviewer/second/+page.server.js | 30 ++ src/routes/reviewer/second/+page.svelte | 36 ++ .../reviewer/second/[id]/+page.server.js | 14 + src/routes/reviewer/second/[id]/+page.svelte | 76 +++ .../reviewer/second/decision/+server.js | 20 + zthoughts/Chris_Notes.txt | 74 ++- 25 files changed, 1575 insertions(+), 315 deletions(-) create mode 100644 src/lib/server/reviewer.js create mode 100644 src/routes/reviewer/+page.server.js create mode 100644 src/routes/reviewer/+page.svelte create mode 100644 src/routes/reviewer/basic/+page.server.js create mode 100644 src/routes/reviewer/basic/+page.svelte create mode 100644 src/routes/reviewer/basic/[id]/+page.server.js create mode 100644 src/routes/reviewer/basic/[id]/+page.svelte create mode 100644 src/routes/reviewer/basic/vote/+server.js create mode 100644 src/routes/reviewer/blackhole/+page.server.js create mode 100644 src/routes/reviewer/blackhole/+page.svelte create mode 100644 src/routes/reviewer/blackhole/[id]/+page.server.js create mode 100644 src/routes/reviewer/blackhole/[id]/+page.svelte create mode 100644 src/routes/reviewer/blackhole/decision/+server.js delete mode 100644 src/routes/reviewer/project/[id]/+page.server.js delete mode 100644 src/routes/reviewer/project/[id]/+page.svelte create mode 100644 src/routes/reviewer/second/+page.server.js create mode 100644 src/routes/reviewer/second/+page.svelte create mode 100644 src/routes/reviewer/second/[id]/+page.server.js create mode 100644 src/routes/reviewer/second/[id]/+page.svelte create mode 100644 src/routes/reviewer/second/decision/+server.js diff --git a/package-lock.json b/package-lock.json index 1baeacf..7ca6c00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "airtable": "^0.12.2", "canvas-confetti": "^1.9.3", + "chart.js": "^4.5.1", "dompurify": "^3.3.0", "dotenv": "^17.2.2", "isomorphic-dompurify": "^2.33.0", @@ -930,6 +931,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -1385,9 +1392,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.49.0", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.49.0.tgz", - "integrity": "sha512-oH8tXw7EZnie8FdOWYrF7Yn4IKrqTFHhXvl8YxXxbKwTMcD/5NNCryUSEXRk2ZR4ojnub0P8rNrsVGHXWqIDtA==", + "version": "2.49.5", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.49.5.tgz", + "integrity": "sha512-dCYqelr2RVnWUuxc+Dk/dB/SjV/8JBndp1UovCyCZdIQezd8TRwFLNZctYkzgHxRJtaNvseCSRsuuHPeUgIN/A==", "dev": true, "license": "MIT", "peer": true, @@ -1397,7 +1404,7 @@ "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", - "devalue": "^5.3.2", + "devalue": "^5.6.2", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", @@ -1416,11 +1423,15 @@ "@opentelemetry/api": "^1.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": "^5.3.3", "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" }, "peerDependenciesMeta": { "@opentelemetry/api": { "optional": true + }, + "typescript": { + "optional": true } } }, @@ -1753,6 +1764,18 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chart.js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz", + "integrity": "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -1993,9 +2016,9 @@ } }, "node_modules/devalue": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.2.tgz", - "integrity": "sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", "dev": true, "license": "MIT" }, diff --git a/src/lib/server/blackhole.js b/src/lib/server/blackhole.js index c124300..d07e901 100644 --- a/src/lib/server/blackhole.js +++ b/src/lib/server/blackhole.js @@ -7,7 +7,7 @@ import { escapeAirtableFormula } from '$lib/server/security.js'; const USER_TABLE = 'User'; const PROJECTS_TABLE = 'Projects'; const USER_BLACKHOLE_VIEW = 'BlackholeSubmission'; -const BLACKHOLE_TABLE = 'BlackholeSubmissions'; +const BLACKHOLE_TABLE = 'BlackholeSubmissions'; // make sure this matches your Airtable table name // Tongyu change dis based on what you want const SUBMISSION_COST_COINS = 10; @@ -16,7 +16,7 @@ const SUBMISSION_COST_COINS = 10; export const blackholeSubmitSchema = z.object({ username: z.string().min(1, 'username is required'), projectId: z.string().min(1, 'projectId is required'), - justification: z.string().max(2000).optional() + justification: z.string().optional() }); export const blackholeModerateSchema = z.object({ @@ -100,7 +100,6 @@ function normalizeSubmission(record) { coinsAfter: f.CoinsAfter ?? null, hackatimeHours: f.HackatimeHoursAtSubmission ?? null, stellarshipsAtSubmission: f.StellarshipsAtSubmission ?? null, - justification: f.Justification ?? null, reviewer: f.Reviewer ?? null, reason: f.Reason ?? null, justification: f.Justification ?? null, @@ -109,6 +108,23 @@ function normalizeSubmission(record) { }; } +/** + * Normalize submission with project info + * @param {any} record + * @param {any} projectRecord + */ +function normalizeSubmissionWithProject(record, projectRecord) { + const submission = normalizeSubmission(record); + if (!submission) return null; + + const pf = projectRecord?.fields ?? {}; + return { + ...submission, + projectName: pf.projectname ?? pf.Name ?? 'Unknown Project', + projectEgg: pf.egg ?? null + }; +} + // core flow /** @@ -128,29 +144,6 @@ async function getNextSubmissionNumber() { return Number(lastNum) + 1; } -/** - * @param {string} userRecordId - * @param {string} projectRecordId - * @returns {Promise} - */ -async function hasActiveSubmission(userRecordId, projectRecordId) { - const escapedUser = escapeAirtableFormula(userRecordId); - const escapedProject = escapeAirtableFormula(projectRecordId); - - const records = await base(BLACKHOLE_TABLE) - .select({ - filterByFormula: ` - AND( - FIND("${escapedUser}", ARRAYJOIN({User}, ",")), - FIND("${escapedProject}", ARRAYJOIN({Project}, ",")), - OR({Status} = "pending", {Status} = "approved") - ) - ` - }) - .firstPage(); - - return records.length > 0; -} /** * submittin @@ -160,6 +153,11 @@ async function hasActiveSubmission(userRecordId, projectRecordId) { export async function submitToBlackhole(rawInput) { const { username, projectId, justification } = blackholeSubmitSchema.parse(rawInput); + // Require justification + if (!justification || !justification.trim()) { + throw new Error('Please explain why your project deserves a stellar ship'); + } + const user = await getUserbyUsername(username); if (!user) { throw new Error('User not found'); @@ -181,12 +179,15 @@ export async function submitToBlackhole(rawInput) { // ASSERT DOMINANCE assertProjectOwnership(project, user); - //Checking if submitted - const alreadySubmitted = await hasActiveSubmission(user.id, project.id); - if (alreadySubmitted) { - throw new Error( - 'This project already has a pending or approved black hole submission.' - ); + // Check if project has already been submitted to blackhole + const existingSubmissions = await base(BLACKHOLE_TABLE) + .select({ + filterByFormula: `FIND("${projectId}", ARRAYJOIN({Project}, ","))` + }) + .firstPage(); + + if (existingSubmissions.length > 0) { + throw new Error('This project has already been submitted to the black hole'); } // Hackatime hours (for recording in submission, not a requirement) diff --git a/src/lib/server/review.js b/src/lib/server/review.js index 5ffb9c3..4d86e10 100644 --- a/src/lib/server/review.js +++ b/src/lib/server/review.js @@ -1,51 +1,52 @@ +// src/lib/server/review.js import { base } from '$lib/server/db.js'; const BLACKHOLE_TABLE = 'BlackholeSubmissions'; -const PROJECTS_TABLE = 'Projects' - -function mapSubmissionWithProject() { - c - c - - l - - if (projectRec) { - project = { - id: - name: - description: - promptinfo: - shipURL: - githubURL: - projectImage: - egg: - hackatimeHours: - }; - } - - return { - id: - status: - username: - userId: - projectId: - coinsSpent: - coinsBefore: - coinsAfter: - hackatimeHours: - stellarshipsAtSubmission: - justification: - reviewer: - reason: - createdTime: +const PROJECTS_TABLE = 'Projects'; + +function mapSubmissionWithProject(rec, projectRec) { + const f = rec.fields ?? {}; + const pf = projectRec?.fields ?? {}; + + let project = null; + + if (projectRec) { + project = { + id: projectRec.id, + name: pf.projectname ?? 'Untitled project', + description: pf.description ?? '', + promptinfo: pf.promptinfo ?? '', + shipURL: pf.shipURL ?? '', + githubURL: pf.githubURL ?? '', + projectImage: pf.projectImage ?? '', + egg: pf.egg ?? '', + hackatimeHours: pf.hackatimeHours ?? null }; + } + + return { + id: rec.id, + status: f.Status ?? 'pending', + username: f.Username ?? null, + userId: Array.isArray(f.User) ? f.User[0] : null, + projectId: Array.isArray(f.Project) ? f.Project[0] : null, + coinsSpent: f.CoinsSpent ?? 0, + coinsBefore: f.CoinsBefore ?? null, + coinsAfter: f.CoinsAfter ?? null, + hackatimeHours: f.HackatimeHoursAtSubmission ?? null, + stellarshipsAtSubmission: f.StellarshipsAtSubmission ?? null, + justification: f.Justification ?? '', + reviewer: f.Reviewer ?? null, + reason: f.Reason ?? null, + createdTime: rec._rawJson?.createdTime ?? null, + project + }; } /** - * Yes I know this is a copy of the server/blackhole.js but this does more + * Get pending blackhole submissions with attached project info * @returns {Promise} */ - export async function getPendingBlackholeReviews() { const records = await base(BLACKHOLE_TABLE) .select({ @@ -59,46 +60,44 @@ export async function getPendingBlackholeReviews() { const f = rec.fields ?? {}; const projectId = Array.isArray(f.Project) ? f.Project[0] : null; - let project = null; - + let projectRec = null; if (projectId) { try { - projectRec = + projectRec = await base(PROJECTS_TABLE).find(projectId); } catch (e) { - console.error + console.error('Error fetching project for review', projectId, e); } } - results. + results.push(mapSubmissionWithProject(rec, projectRec)); } return results; } - /** - * Getting a single submissions (any status) - * @param {} - * @returns {} + * Get a single submission (any status) with project info + * @param {string} submissionId + * @returns {Promise} */ -export async function getBlackholeReviewById() { - try { - const - const - const - - let - if () { - try { - pr - } catch (e) { - c - } - } +export async function getBlackholeReviewById(submissionId) { + try { + const rec = await base(BLACKHOLE_TABLE).find(submissionId); + const f = rec.fields ?? {}; + const projectId = Array.isArray(f.Project) ? f.Project[0] : null; - return - } catch () { - c - r + let projectRec = null; + if (projectId) { + try { + projectRec = await base(PROJECTS_TABLE).find(projectId); + } catch (e) { + console.error('Error fetching project for review (single)', projectId, e); + } } + + return mapSubmissionWithProject(rec, projectRec); + } catch (e) { + console.error('Error fetching submission by ID', submissionId, e); + return null; + } } diff --git a/src/lib/server/reviewer.js b/src/lib/server/reviewer.js new file mode 100644 index 0000000..8d792fd --- /dev/null +++ b/src/lib/server/reviewer.js @@ -0,0 +1,436 @@ +console.log('@@ reviewer.js loaded @@'); + +import { base } from '$lib/server/db.js'; +import { escapeAirtableFormula } from '$lib/server/security.js'; + +const USER_TABLE = 'User'; +const USER_INFO_VIEW = 'User Info'; + +const PROJECTS_TABLE = 'Projects'; +// const PROJECTS_GRID_VIEW = 'Grid view'; + +const YSWS_TABLE = 'YSWS Project Submission'; + +const BLACKHOLE_TABLE = 'BlackholeSubmissions'; +const BLACKHOLE_PENDING_VIEW = 'Pending only'; + +// Project +const FIELD_STATUS = 'status'; +const FIELD_WAITING_REVIEW = 'waitingReview'; +const FIELD_HOURS = 'hoursShipped'; + +const FIELD_VOTE_CRAZY = 'Crazygood'; +const FIELD_VOTE_GOOD = 'good'; +const FIELD_VOTE_UNSURE = 'unsure'; +const FIELD_VOTE_NOTHOURS = 'nothours'; + +const FIELD_BASIC_REVIEWERS = 'reviewedBy'; +const FIELD_YSWS_LINK = 'YSWS Project Submission'; + +const FIELD_COINS_AWARDED = 'coinsAwarded'; +const FIELD_AWARDING_RESULTS = 'awardingResults'; + +// Blackhole +const BH_FIELD_STATUS = 'Status'; +const BH_FIELD_REVIEWED_BY = 'ReviewedBy'; + +// once i add justification field DO SOON +const BH_FIELD_DECISION = null; + +/** + * Reviewer perms + * @param {string} userRecId + * @returns {Promise} + */ +export async function getReviewerPermissions(userRecId) { + const escaped = escapeAirtableFormula(userRecId); + + const records = await base(USER_TABLE) + .select({ + view: USER_INFO_VIEW, + filterByFormula: `RECORD_ID() = "${escaped}"` + }) + .firstPage(); + + const rec = records[0]; + const perms = rec?.fields?.permissions; + + return Array.isArray(perms) ? perms.map(String) : []; +} + +/** + * Basic reviewer queue + * @returns {Promise} + */ +export async function getBasicReviewQueue() { + console.log('@@ getBasicReviewQueue CALLED @@'); + + const formula = `AND( + {${FIELD_STATUS}} = "submitted", + OR( + LEN(TRIM({${FIELD_WAITING_REVIEW}} & "")) = 0, + REGEX_MATCH(LOWER(TRIM({${FIELD_WAITING_REVIEW}} & "")), "^waiting") + ) + )`; + + console.log('[basic queue] formula:', formula); + + const records = await base(PROJECTS_TABLE) + .select({ + filterByFormula: formula + }) + .all(); + + console.log('[basic queue] records found:', records.length); + + // just in case queue dies on me again + if (records.length === 0) { + const sample = await base(PROJECTS_TABLE).select({ maxRecords: 8 }).firstPage(); + console.log( + '[basic queue] sample project fields:', + sample.map((r) => ({ + id: r.id, + status: r.fields?.[FIELD_STATUS], + waitingReview: r.fields?.[FIELD_WAITING_REVIEW] + })) + ); + } + + return records.map(normalizeProjectForReview); +} + +/** + * Second reviewer queue: + * @returns {Promise} + */ +export async function getSecondReviewQueue() { + const formula = `AND( + {${FIELD_STATUS}} = "second", + OR( + LEN(TRIM({${FIELD_WAITING_REVIEW}} & "")) = 0, + REGEX_MATCH(LOWER(TRIM({${FIELD_WAITING_REVIEW}} & "")), "^waiting") + ) + )`; + + const records = await base(PROJECTS_TABLE) + .select({ + filterByFormula: formula + }) + .all(); + + return records.map(normalizeProjectForReview); +} + +/** + * Fetch one project for review by Airtable record id + * @param {string} projectId + * @returns {Promise} + */ +export async function getProjectForReviewById(projectId) { + try { + const rec = await base(PROJECTS_TABLE).find(projectId); + return normalizeProjectForReview(rec); + } catch (e) { + console.error('getProjectForReviewById error', e); + return null; + } +} + +/** + * Blackhole pending + * @returns {Promise} + */ +export async function getBlackholePendingQueue() { + const records = await base(BLACKHOLE_TABLE).select({ view: BLACKHOLE_PENDING_VIEW }).all(); + return records.map(normalizeBlackholeSubmission); +} + +/** + * Fetch one blackhole submission by id + * @param {string} submissionId + * @returns {Promise} + */ +export async function getBlackholeSubmissionById(submissionId) { + try { + const rec = await base(BLACKHOLE_TABLE).find(submissionId); + return normalizeBlackholeSubmission(rec); + } catch (e) { + console.error('getBlackholeSubmissionById error', e); + return null; + } +} + +/** + * Basic + */ +export async function submitBasicVote({ projectId, reviewerId, vote }) { + if (!projectId || !reviewerId || !vote) { + throw new Error('Missing projectId, reviewerId, or vote'); + } + + /** @type {Record} */ + const voteFieldMap = { + crazygood: FIELD_VOTE_CRAZY, + good: FIELD_VOTE_GOOD, + unsure: FIELD_VOTE_UNSURE, + nothours: FIELD_VOTE_NOTHOURS + }; + + const voteField = voteFieldMap[vote]; + if (!voteField) throw new Error(`Invalid vote: ${vote}`); + + const projectRec = await base(PROJECTS_TABLE).find(projectId); + const f = projectRec.fields ?? {}; + + const status = String(f[FIELD_STATUS] ?? ''); + const waitingReview = f[FIELD_WAITING_REVIEW]; + const waitingOk = isWaitingReviewAllowed(waitingReview); + + if (status !== 'submitted' || !waitingOk) { + throw new Error(`Project not reviewable. status=${status}, waitingOk=${waitingOk}`); + } + + const existingReviewers = Array.isArray(f[FIELD_BASIC_REVIEWERS]) ? f[FIELD_BASIC_REVIEWERS] : []; + if (existingReviewers.includes(reviewerId)) { + throw new Error('Reviewer already voted on this project'); + } + + const curCrazy = toNum(f[FIELD_VOTE_CRAZY]); + const curGood = toNum(f[FIELD_VOTE_GOOD]); + const curUnsure = toNum(f[FIELD_VOTE_UNSURE]); + const curNotHours = toNum(f[FIELD_VOTE_NOTHOURS]); + + /** @type {{crazygood:number, good:number, unsure:number, nothours:number}} */ + const next = { crazygood: curCrazy, good: curGood, unsure: curUnsure, nothours: curNotHours }; + next[vote] += 1; + + let newStatus = status; + /** @type {null | 10 | 9} */ + let coinsPerHour = null; + + if (next.unsure >= 2 || next.nothours >= 2) { + newStatus = 'second'; + } else if (next.crazygood >= 2) { + coinsPerHour = 10; + } else if (next.crazygood + next.good >= 2) { + coinsPerHour = 9; + } + + // Only require YSWS link if awarding + let yswsSubmissionId = null; + if (coinsPerHour !== null) { + const yswsLinked = Array.isArray(f[FIELD_YSWS_LINK]) ? f[FIELD_YSWS_LINK] : []; + if (yswsLinked.length === 0) { + throw new Error('No linked YSWS Project Submission record on this Project.'); + } + yswsSubmissionId = yswsLinked[0]; + } + + /** @type {Record} */ + const updateFields = { + [FIELD_VOTE_CRAZY]: next.crazygood, + [FIELD_VOTE_GOOD]: next.good, + [FIELD_VOTE_UNSURE]: next.unsure, + [FIELD_VOTE_NOTHOURS]: next.nothours, + [FIELD_BASIC_REVIEWERS]: [...existingReviewers, reviewerId] + }; + + if (newStatus !== status) updateFields[FIELD_STATUS] = newStatus; + + await base(PROJECTS_TABLE).update(projectId, updateFields); + + let awardResult = null; + if (coinsPerHour !== null && yswsSubmissionId) { + const hours = toNum(f[FIELD_HOURS]); + const coinsAwarded = hours * coinsPerHour; + + await base(YSWS_TABLE).update(yswsSubmissionId, { + [FIELD_COINS_AWARDED]: coinsAwarded, + [FIELD_AWARDING_RESULTS]: `basic_awarded_${coinsPerHour}_cph` + }); + + awardResult = { submissionId: yswsSubmissionId, coinsAwarded, coinsPerHour }; + } + + return { ok: true, projectId, nextCounts: next, newStatus, awardResult }; +} + +/** + * Blackhole review + */ +export async function submitBlackholeDecision({ submissionId, reviewerId, decision }) { + if (!submissionId || !reviewerId || !decision) { + throw new Error('Missing submissionId, reviewerId, or decision'); + } + if (decision !== 'approve' && decision !== 'reject') { + throw new Error('Decision must be "approve" or "reject"'); + } + + const rec = await base(BLACKHOLE_TABLE).find(submissionId); + const f = rec.fields ?? {}; + + const already = Array.isArray(f[BH_FIELD_REVIEWED_BY]) ? f[BH_FIELD_REVIEWED_BY] : []; + if (already.includes(reviewerId)) { + throw new Error('You already reviewed this blackhole submission'); + } + + const nextReviewedBy = [...already, reviewerId]; + const nextStatus = decision === 'approve' ? 'approved' : 'rejected'; + + /** @type {Record} */ + const updateFields = { + [BH_FIELD_STATUS]: nextStatus, + [BH_FIELD_REVIEWED_BY]: nextReviewedBy + }; + + if (BH_FIELD_DECISION) updateFields[BH_FIELD_DECISION] = decision; + + await base(BLACKHOLE_TABLE).update(submissionId, updateFields); + + return { ok: true, submissionId, status: nextStatus }; +} + +/** + * Second review + */ +export async function submitSecondDecision({ projectId, reviewerId, action }) { + if (!projectId || !reviewerId || !action) { + throw new Error('Missing projectId, reviewerId, or action'); + } + if (!['award10', 'award9', 'backToWip'].includes(action)) { + throw new Error('Invalid action'); + } + + const projectRec = await base(PROJECTS_TABLE).find(projectId); + const f = projectRec.fields ?? {}; + + const status = String(f[FIELD_STATUS] ?? ''); + const waitingReview = f[FIELD_WAITING_REVIEW]; + const waitingOk = isWaitingReviewAllowed(waitingReview); + + if (status !== 'second' || !waitingOk) { + throw new Error(`Project not reviewable for second. status=${status}, waitingOk=${waitingOk}`); + } + + const reviewedBy = Array.isArray(f[FIELD_BASIC_REVIEWERS]) ? f[FIELD_BASIC_REVIEWERS] : []; + if (reviewedBy.includes(reviewerId)) { + throw new Error('You already reviewed this project'); + } + + // mark reviewed + await base(PROJECTS_TABLE).update(projectId, { + [FIELD_BASIC_REVIEWERS]: [...reviewedBy, reviewerId] + }); + + if (action === 'backToWip') { + await base(PROJECTS_TABLE).update(projectId, { [FIELD_STATUS]: 'wip' }); + return { ok: true, projectId, newStatus: 'wip' }; + } + + const yswsLinked = Array.isArray(f[FIELD_YSWS_LINK]) ? f[FIELD_YSWS_LINK] : []; + if (yswsLinked.length === 0) { + throw new Error('No linked YSWS Project Submission record on this Project.'); + } + const yswsSubmissionId = yswsLinked[0]; + + const coinsPerHour = action === 'award10' ? 10 : 9; + const hours = toNum(f[FIELD_HOURS]); + const coinsAwarded = hours * coinsPerHour; + + await base(YSWS_TABLE).update(yswsSubmissionId, { + [FIELD_COINS_AWARDED]: coinsAwarded, + [FIELD_AWARDING_RESULTS]: `second_awarded_${coinsPerHour}_cph` + }); + + return { ok: true, projectId, awardResult: { submissionId: yswsSubmissionId, coinsAwarded, coinsPerHour } }; +} + +function pickField(f, keys, fallback = '') { + for (const k of keys) { + const v = f?.[k]; + if (v !== undefined && v !== null && String(v).trim() !== '') return v; + } + return fallback; +} + +/** + * Normalizing Projects + * @param {any} rec + */ +function normalizeProjectForReview(rec) { + const f = rec?.fields ?? {}; + + return { + id: rec.id, + + projectname: pickField(f, ['projectname', 'Project Name', 'Project', 'Name'], 'Untitled project'), + username: pickField(f, ['username', 'Username', 'userName', 'User'], ''), + + description: pickField(f, ['description', 'Description', 'desc'], ''), + howToPlay: pickField(f, ['howToPlay', 'How to Play', 'How To Play', 'how to play'], ''), + addnComments: pickField(f, ['addnComments', 'Additional Comments', 'Addn Comments', 'additionalComments'], ''), + notMadeBy: pickField(f, ['notMadeBy', 'Not made by', 'Not Made By'], ''), + + image: f.image ?? f.Image ?? null, + githubURL: pickField(f, ['githubURL', 'GitHub', 'Github', 'github'], ''), + shipURL: pickField(f, ['shipURL', 'Ship URL', 'ship', 'Ship'], ''), + + artHoursShipped: f.artHoursShipped ?? f['art hours shipped'] ?? null, + hoursShipped: f.hoursShipped ?? f['hours shipped'] ?? null, + hackatimeProjects: f.hackatimeProjects ?? f['Hackatime Projects'] ?? [], + + status: f[FIELD_STATUS] ?? '', + waitingReview: f[FIELD_WAITING_REVIEW] ?? '', + + Crazygood: f[FIELD_VOTE_CRAZY] ?? 0, + good: f[FIELD_VOTE_GOOD] ?? 0, + unsure: f[FIELD_VOTE_UNSURE] ?? 0, + nothours: f[FIELD_VOTE_NOTHOURS] ?? 0, + + reviewedBy: f[FIELD_BASIC_REVIEWERS] ?? [] + }; +} + +/** + * Normalize Blackhole + * @param {any} rec + */ +function normalizeBlackholeSubmission(rec) { + const f = rec?.fields ?? {}; + return { + id: rec.id, + status: f[BH_FIELD_STATUS] ?? 'pending', + Username: f.Username ?? '', + Justification: f.Justification ?? '', + Screenshots: f.Screenshots ?? null, + User: Array.isArray(f.User) ? f.User[0] : null, + Project: Array.isArray(f.Project) ? f.Project[0] : null, + shipURL: f.shipURL ?? '', + ReviewedBy: f[BH_FIELD_REVIEWED_BY] ?? [] + }; +} + +function toNum(x) { + const n = typeof x === 'number' ? x : Number(x ?? 0); + return Number.isFinite(n) ? n : 0; +} + +/** + * waitingReview check + */ +function isWaitingReviewAllowed(waitingReview) { + if (waitingReview === undefined || waitingReview === null) return true; +// i swear if its an array + if (Array.isArray(waitingReview)) { + if (waitingReview.length === 0) return true; + waitingReview = waitingReview.join(', '); + } + + const s = String(waitingReview).trim(); + if (s.length === 0) return true; + return s.toLowerCase().startsWith('waiting'); +} + +function isWaitingReviewEmpty(waitingReview) { + return isWaitingReviewAllowed(waitingReview) && String(waitingReview ?? '').trim().length === 0; +} diff --git a/src/routes/api/auto-update-hackatime/+server.js b/src/routes/api/auto-update-hackatime/+server.js index c30c9aa..e2d03b4 100644 --- a/src/routes/api/auto-update-hackatime/+server.js +++ b/src/routes/api/auto-update-hackatime/+server.js @@ -1,38 +1,46 @@ import { json } from '@sveltejs/kit'; import { base } from '$lib/server/db.js'; import { fetchProjects } from '$lib/server/hackatime.js'; -import { sanitizeErrorMessage } from '$lib/server/security.js'; -import { escapeAirtableFormula } from '$lib/server/security.js'; +import { sanitizeErrorMessage, escapeAirtableFormula } from '$lib/server/security.js'; /** * Auto-update Hackatime hours for all user projects * This endpoint is called automatically after page load to keep project hours up-to-date + * + * IMPORTANT: + * - This endpoint must NEVER crash SSR routes. + * - Therefore: do NOT return 500. Return 200 with success:false instead. */ export async function POST({ locals }) { + const now = new Date(); + try { + // Never hard-fail page loads due to auth if (!locals.user) { - return json({ error: 'Unauthorized' }, { status: 401 }); + return json( + { success: false, skipped: true, skippedReason: 'not_logged_in' }, + { status: 200 } + ); } const userEmail = locals.user.email; - - // Check if we should skip update based on last update time (rate limiting) - // Only update if it's been more than 15 minutes since last update - const now = new Date(); + + // Rate limiting: only update if > 15 min since last update const lastUpdate = locals.user.lastHackatimeUpdate; - if (lastUpdate) { const lastUpdateTime = new Date(lastUpdate); const minutesSinceUpdate = (now - lastUpdateTime) / (1000 * 60); - - if (minutesSinceUpdate < 15) { - // Too soon, skip update - return json({ - success: true, - skipped: true, - message: 'Updated recently, skipping', - minutesUntilNext: Math.ceil(15 - minutesSinceUpdate) - }); + + if (Number.isFinite(minutesSinceUpdate) && minutesSinceUpdate < 15) { + return json( + { + success: true, + skipped: true, + message: 'Updated recently, skipping', + minutesUntilNext: Math.ceil(15 - minutesSinceUpdate) + }, + { status: 200 } + ); } } @@ -43,34 +51,38 @@ export async function POST({ locals }) { .all(); if (records.length === 0) { - return json({ success: true, updatedCount: 0, message: 'No projects to update' }); + return json( + { success: true, updatedCount: 0, message: 'No projects to update' }, + { status: 200 } + ); } // Filter projects that have Hackatime projects associated - const projectsToUpdate = records.filter(record => { + const projectsToUpdate = records.filter((record) => { const hackatimeProjects = record.fields.hackatimeProjects; - return hackatimeProjects && - typeof hackatimeProjects === 'string' && - hackatimeProjects.trim() !== ''; + return ( + hackatimeProjects && + typeof hackatimeProjects === 'string' && + hackatimeProjects.trim() !== '' + ); }); if (projectsToUpdate.length === 0) { - return json({ success: true, updatedCount: 0, message: 'No projects with Hackatime associations' }); + return json( + { success: true, updatedCount: 0, message: 'No projects with Hackatime associations' }, + { status: 200 } + ); } let updatedCount = 0; const errors = []; - // Update each project's hours for (const projectRecord of projectsToUpdate) { try { const projectCreated = projectRecord.fields.countingFrom; - - if (!projectCreated) { - continue; // Skip projects without creation date - } + if (!projectCreated) continue; - // Calculate start date (1 week before project creation) + // Start date: 1 day before project creation const projectCreatedDate = new Date(String(projectCreated)); const oneDayBefore = new Date(projectCreatedDate); oneDayBefore.setDate(projectCreatedDate.getDate() - 1); @@ -79,13 +91,12 @@ export async function POST({ locals }) { // Fetch HackaTime data const hackatimeData = await fetchProjects(userEmail, null, startDate); - if (hackatimeData && hackatimeData.data && hackatimeData.data.projects) { - // Parse selected projects list - const selectedProjectNames = projectRecord.fields.hackatimeProjects + if (hackatimeData?.data?.projects) { + const selectedProjectNames = String(projectRecord.fields.hackatimeProjects) .split(', ') - .filter(n => n.trim()); + .map((s) => s.trim()) + .filter(Boolean); - // Calculate hours based on actual HackaTime data let totalHours = 0; for (const htProject of hackatimeData.data.projects) { if (selectedProjectNames.includes(htProject.name)) { @@ -93,11 +104,9 @@ export async function POST({ locals }) { } } - // Round to 2 decimal places const calculatedHours = Math.round(totalHours * 100) / 100; - - // Only update if hours have changed const currentHours = projectRecord.fields.hackatimeHours || 0; + if (calculatedHours !== currentHours) { await base('Projects').update(projectRecord.id, { hackatimeHours: calculatedHours @@ -115,29 +124,36 @@ export async function POST({ locals }) { } } - // Update user's last Hackatime update timestamp + // Update user's last update timestamp (non-fatal) try { await base('User').update(locals.user.recId, { lastHackatimeUpdate: now.toISOString() }); } catch (updateError) { console.error('Failed to update lastHackatimeUpdate:', updateError); - // Don't fail the whole operation if timestamp update fails } - return json({ - success: true, - updatedCount, - totalProjects: projectsToUpdate.length, - errors: errors.length > 0 ? errors : undefined, - message: `Updated ${updatedCount} project(s)` - }); - + return json( + { + success: true, + updatedCount, + totalProjects: projectsToUpdate.length, + errors: errors.length > 0 ? errors : undefined, + message: `Updated ${updatedCount} project(s)` + }, + { status: 200 } + ); } catch (error) { - console.error('Error in auto-update-hackatime:', error); - return json({ - error: sanitizeErrorMessage(error, 'Failed to auto-update Hackatime hours') - }, { status: 500 }); + // CRITICAL: never return 500 from this endpoint. + console.error('Error in auto-update-hackatime (ignored):', error); + return json( + { + success: false, + skipped: true, + skippedReason: 'exception', + error: sanitizeErrorMessage(error, 'Failed to auto-update Hackatime hours') + }, + { status: 200 } + ); } } - diff --git a/src/routes/reviewer/+page.server.js b/src/routes/reviewer/+page.server.js new file mode 100644 index 0000000..9080fe0 --- /dev/null +++ b/src/routes/reviewer/+page.server.js @@ -0,0 +1,53 @@ +// import { redirect } from '@sveltejs/kit'; +// import { sanitizeUserForFrontend } from '$lib/server/auth'; +// import { getReviewerPermissions } from '$lib/server/reviewer.js'; + +// export async function load({ locals }) { +// if (!locals.user) throw redirect(302, '/'); + +// const recId = locals.user.recId; +// const permissions = recId ? await getReviewerPermissions(recId) : []; + +// return { +// user: sanitizeUserForFrontend(locals.user), +// permissions +// }; +// } + +// the one that worked + +// import { redirect } from '@sveltejs/kit'; +// import { getReviewerPermissions } from '$lib/server/reviewer.js'; + +// export async function load({ locals }) { +// console.log('[reviewer root] load hit. locals.user =', locals.user); + +// if (!locals.user) throw redirect(302, '/'); + +// try { +// const perms = await getReviewerPermissions(locals.user.recId); +// console.log('[reviewer root] perms =', perms); +// return { perms }; +// } catch (e) { +// console.error('[reviewer root] getReviewerPermissions failed:', e); + +// return { perms: [] }; +// } +// } + +import { redirect } from '@sveltejs/kit'; + +export async function load({ locals }) { + + if (!locals.user) throw redirect(302, '/'); + + // ✅ Use perms already on locals.user + const perms = Array.isArray(locals.user.permissions) + ? locals.user.permissions.map(String) + : []; + + return { + perms, + userRecId: locals.user.recId + }; +} diff --git a/src/routes/reviewer/+page.svelte b/src/routes/reviewer/+page.svelte new file mode 100644 index 0000000..a0b7f09 --- /dev/null +++ b/src/routes/reviewer/+page.svelte @@ -0,0 +1,74 @@ + + + + Reviewers + + +

Reviewer Hub!

+ +
+

Reviewer

+ +

your permissions: {perms.length ? perms.join(', ') : 'none'}

+ +
+ {#if canBlackhole}a + > blackhole queue + {/if} + + {#if canBasic} + > basic queue + {/if} + + {#if canSecond} + > second queue + {/if} + + {#if canAdmin} + > admin queue + {/if} + + {#if !canBlackhole && !canBasic && !canSecond && !canAdmin} +

you don't have any perms... why are you here?

+ {/if} +
+
+ + \ No newline at end of file diff --git a/src/routes/reviewer/basic/+page.server.js b/src/routes/reviewer/basic/+page.server.js new file mode 100644 index 0000000..6c7b314 --- /dev/null +++ b/src/routes/reviewer/basic/+page.server.js @@ -0,0 +1,16 @@ +import { redirect } from '@sveltejs/kit'; +import { getReviewerPermissions, getBasicReviewQueue } from '$lib/server/reviewer.js'; + +export async function load({ locals }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = Array.isArray(locals.user.permissions) + ? locals.user.permissions.map(String) + : await getReviewerPermissions(locals.user.recId); + + if (!perms.includes('Basic')) throw redirect(302, '/reviewer'); + + const projects = await getBasicReviewQueue(); + + return { perms, projects }; +} diff --git a/src/routes/reviewer/basic/+page.svelte b/src/routes/reviewer/basic/+page.svelte new file mode 100644 index 0000000..fd84939 --- /dev/null +++ b/src/routes/reviewer/basic/+page.svelte @@ -0,0 +1,64 @@ + + +
+ < back +

basic review queue

+ + {#if projects.length === 0} +

no projects to review lets GOOOOO

+ {:else} + + {/if} +
+ + diff --git a/src/routes/reviewer/basic/[id]/+page.server.js b/src/routes/reviewer/basic/[id]/+page.server.js new file mode 100644 index 0000000..fc7baf6 --- /dev/null +++ b/src/routes/reviewer/basic/[id]/+page.server.js @@ -0,0 +1,17 @@ +import { redirect, error } from '@sveltejs/kit'; +import { getReviewerPermissions, getProjectForReviewById } from '$lib/server/reviewer.js'; + +export async function load({ locals, params }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = Array.isArray(locals.user.permissions) + ? locals.user.permissions.map(String) + : await getReviewerPermissions(locals.user.recId); + + if (!perms.includes('Basic')) throw redirect(302, '/reviewer'); + + const project = await getProjectForReviewById(params.id); + if (!project) throw error(404, 'Project not found'); + + return { perms, project }; +} diff --git a/src/routes/reviewer/basic/[id]/+page.svelte b/src/routes/reviewer/basic/[id]/+page.svelte new file mode 100644 index 0000000..0367fc5 --- /dev/null +++ b/src/routes/reviewer/basic/[id]/+page.svelte @@ -0,0 +1,179 @@ + + +
+ < back to queue +

{p.projectname}

+ +

username: {p.username || '-'}

+ + + + {#if message}

{message}

{/if} + {#if errorMsg}

{errorMsg}

{/if} + +
+
+

howToPlay

+
{p.howToPlay || '-'}
+
+ +
+

addnComments

+
{p.addnComments || '-'}
+
+ +
+

notMadeBy

+
{p.notMadeBy || '-'}
+
+ +
+

description

+
{p.description || '-'}
+
+ +
+

hours

+
hoursShipped: {p.hoursShipped ?? '—'}
+artHoursShipped: {p.artHoursShipped ?? '—'}
+
+ +
+

hackatimeProjects

+
{JSON.stringify(p.hackatimeProjects ?? [], null, 2)}
+
+
+ +

+ current votes — Crazygood: {p.Crazygood ?? 0}, good: {p.good ?? 0}, unsure: {p.unsure ?? 0}, nothours: {p.nothours ?? 0} +

+ +
+ + + + +
+
+ + diff --git a/src/routes/reviewer/basic/vote/+server.js b/src/routes/reviewer/basic/vote/+server.js new file mode 100644 index 0000000..370d3e7 --- /dev/null +++ b/src/routes/reviewer/basic/vote/+server.js @@ -0,0 +1,20 @@ +import { json } from '@sveltejs/kit'; +import { submitBasicVote } from '$lib/server/reviewer.js'; + +export async function POST({ request, locals }) { + try { + if (!locals.user) { + return json({ ok: false, error: 'Not logged in' }, { status: 401 }); + } + + const { projectId, vote } = await request.json(); + const reviewerId = locals.user.recId; + + const result = await submitBasicVote({ projectId, reviewerId, vote }); + return json(result); + } catch (e) { + console.error('basic vote error', e); + const msg = e instanceof Error ? e.message : String(e); + return json({ ok: false, error: msg }, { status: 500 }); + } +} diff --git a/src/routes/reviewer/blackhole/+page.server.js b/src/routes/reviewer/blackhole/+page.server.js new file mode 100644 index 0000000..b533732 --- /dev/null +++ b/src/routes/reviewer/blackhole/+page.server.js @@ -0,0 +1,31 @@ +// import { redirect } from '@sveltejs/kit'; +// import { getReviewerPermissions, getBlackholePendingQueue } from '$lib/server/reviewer.js'; + +// export async function load({ locals }) { +// if (!locals.user) throw redirect(302, '/'); + +// const perms = await getReviewerPermissions(locals.user.recId); +// if (!perms.includes('Blackhole')) throw redirect(302, '/reviewer'); + +// const submissions =await getBlackholePendingQueue(); +// return { submissions }; +// } + +import { redirect } from '@sveltejs/kit'; +import { getReviewerPermissions, getBlackholePendingQueue } from '$lib/server/reviewer.js'; + +export async function load({ locals }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = Array.isArray(locals.user.permissions) ? locals.user.permissions : []; + if (!perms.includes('Blackhole')) throw redirect(302, '/reviewer'); + + try { + const submissions = await getBlackholePendingQueue(); + return { submissions }; + } catch (e) { + console.error('[blackhole] load failed:', e); + return { submissions: [], error: e?.message ?? String(e) }; + } +} + diff --git a/src/routes/reviewer/blackhole/+page.svelte b/src/routes/reviewer/blackhole/+page.svelte new file mode 100644 index 0000000..751ef1a --- /dev/null +++ b/src/routes/reviewer/blackhole/+page.svelte @@ -0,0 +1,71 @@ + + +
+ < back +

blackhole queue

+ + {#if submissions.length === 0} +

no pending blackhole submissions!

+ {:else} + + {/if} +
+ + diff --git a/src/routes/reviewer/blackhole/[id]/+page.server.js b/src/routes/reviewer/blackhole/[id]/+page.server.js new file mode 100644 index 0000000..f41dd14 --- /dev/null +++ b/src/routes/reviewer/blackhole/[id]/+page.server.js @@ -0,0 +1,19 @@ +import { redirect, error } from '@sveltejs/kit'; +import { getReviewerPermissions, getBlackholeSubmissionById, getProjectForReviewById } from '$lib/server/reviewer.js'; + +export async function load({ locals, params }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = await getReviewerPermissions(locals.user.recId); + if (!perms.includes('Blackhole')) throw redirect(302, '/reviewer'); + + const submission = await getBlackholeSubmissionById(params.id); + if (!submission) throw error(404, 'Submission not found'); + + let project = null; + if (submission.Project) { + project = await getProjectForReviewById(submission.Project); + } + + return { submission, project }; +} \ No newline at end of file diff --git a/src/routes/reviewer/blackhole/[id]/+page.svelte b/src/routes/reviewer/blackhole/[id]/+page.svelte new file mode 100644 index 0000000..2fbe149 --- /dev/null +++ b/src/routes/reviewer/blackhole/[id]/+page.svelte @@ -0,0 +1,138 @@ + + +
+ < back to queue +

blackhole review

+ +
+
User: {s.User || '—'}
+
Username: {s.Username || '—'}
+
Project: {s.Project || '—'}
+
shipURL: {s.shipURL || project?.shipURL || '—'}
+
+ +
+

Justification

+

{s.Justification || '(none)'}

+
+ +
+

Screenshots

+ {#if attachmentUrls(s.Screenshots).length === 0} +

(none)

+ {:else} +
+ {#each attachmentUrls(s.Screenshots) as url} + screenshot + {/each} +
+ {/if} +
+ + {#if project} + + > open linked project (projects tab view later) + + {/if} + +
+ + +
+
+ + diff --git a/src/routes/reviewer/blackhole/decision/+server.js b/src/routes/reviewer/blackhole/decision/+server.js new file mode 100644 index 0000000..1173182 --- /dev/null +++ b/src/routes/reviewer/blackhole/decision/+server.js @@ -0,0 +1,20 @@ +import { json } from '@sveltejs/kit'; +import { getReviewerPermissions, submitBlackholeDecision } from '$lib/server/reviewer.js'; + +export async function POST({ request, locals }) { + try { + if (!locals.user) return json({ ok: false, error: 'Not logged in' }, { status: 401 }); + + const perms = await getReviewerPermissions(locals.user.recId); + if (!perms.includes('Blackhole')) return json({ ok: false, error: 'No permission' }, { status: 403 }); + + const { submissionId, decision } = await request.json(); + const reviewerId = locals.user.recId; + + const result = await submitBlackholeDecision({ submissionId, reviewerId, decision }); + return json(result); + } catch (e) { + console.error('blackhole decision error', e); + return json({ ok: false, error: e.message ?? 'Unknown error' }, { status: 500 }); + } +} diff --git a/src/routes/reviewer/project/[id]/+page.server.js b/src/routes/reviewer/project/[id]/+page.server.js deleted file mode 100644 index 27115fc..0000000 --- a/src/routes/reviewer/project/[id]/+page.server.js +++ /dev/null @@ -1,28 +0,0 @@ -import { error, redirect } from '@sveltejs/kit'; -import { sanitizeUserForFrontend } from '$lib/server/auth'; -import { getBlackholeReviewById } from '$lib/server/review.js'; - -export async function load({ locals, cookies, params }) { - if (!locals.user) throw redirect(302, '/'); - - const authorized = cookies.get('reviewer_auth') === '1'; - if (!authorized) { - throw redirect(302, '/reviewer'); - } - - const id = params.id; - if (!id) { - throw error(400, 'Missing submission id'); - } - - const submission = await getBlackholeReviewById(id); - if (!submission || submission.status !== 'pending') { - // could still allow viewing non-pending if ya want - throw error(404, 'Submission not found or not pending'); - } - - return { - user: sanitizeUserForFrontend(locals.user), - submission - }; -} diff --git a/src/routes/reviewer/project/[id]/+page.svelte b/src/routes/reviewer/project/[id]/+page.svelte deleted file mode 100644 index 9bef1ff..0000000 --- a/src/routes/reviewer/project/[id]/+page.svelte +++ /dev/null @@ -1,121 +0,0 @@ - - - - Review - {submission.project?.name ?? 'Project'} - - -
-
-
- -
-
- - \ No newline at end of file diff --git a/src/routes/reviewer/second/+page.server.js b/src/routes/reviewer/second/+page.server.js new file mode 100644 index 0000000..6b492ad --- /dev/null +++ b/src/routes/reviewer/second/+page.server.js @@ -0,0 +1,30 @@ +// import { redirect } from '@sveltejs/kit'; +// import { getReviewerPermissions, getSecondReviewQueue } from '$lib/server/reviewer.js'; + +// export async function load({ locals }) { +// if (!locals.user) throw redirect(302, '/'); + +// const perms = await getReviewerPermissions(locals.user.recId); +// if (!perms.includes('Second')) throw redirect(302, '/reviewer'); + +// const projects = await getSecondReviewQueue(); +// return { projects }; +// } + +import { redirect } from '@sveltejs/kit'; +import { getSecondReviewQueue } from '$lib/server/reviewer.js'; + +export async function load({ locals }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = Array.isArray(locals.user.permissions) ? locals.user.permissions : []; + if (!perms.includes('Second')) throw redirect(302, '/reviewer'); + + try { + const projects = await getSecondReviewQueue(); + return { projects }; + } catch (e) { + console.error('[second] load failed:', e); + return { projects: [], error: e?.message ?? String(e) }; + } +} diff --git a/src/routes/reviewer/second/+page.svelte b/src/routes/reviewer/second/+page.svelte new file mode 100644 index 0000000..c7047f7 --- /dev/null +++ b/src/routes/reviewer/second/+page.svelte @@ -0,0 +1,36 @@ + + +
+ < back +

second review queue

+ + {#if projects.length === 0} +

no second-review projects right now

+ {:else} + + {/if} +
+ + diff --git a/src/routes/reviewer/second/[id]/+page.server.js b/src/routes/reviewer/second/[id]/+page.server.js new file mode 100644 index 0000000..64659e9 --- /dev/null +++ b/src/routes/reviewer/second/[id]/+page.server.js @@ -0,0 +1,14 @@ +import { redirect, error } from '@sveltejs/kit'; +import { getReviewerPermissions, getProjectForReviewById } from '$lib/server/reviewer.js'; + +export async function load({ locals, params }) { + if (!locals.user) throw redirect(302, '/'); + + const perms = await getReviewerPermissions(locals.user.recId); + if (!perms.includes('Second')) throw redirect(302, '/reviewer'); + + const project = await getProjectForReviewById(params.id); + if (!project) throw error(404, 'Project not found'); + + return { project }; +} diff --git a/src/routes/reviewer/second/[id]/+page.svelte b/src/routes/reviewer/second/[id]/+page.svelte new file mode 100644 index 0000000..f020cd2 --- /dev/null +++ b/src/routes/reviewer/second/[id]/+page.svelte @@ -0,0 +1,76 @@ + + +
+ < back +

second review

+ +

{p.projectname}

+

user: {p.username || '-'}

+ + + +
+

description

+
{p.description || '-'}
+

+ hoursShipped: {p.hoursShipped ?? '—'} • votes: CG {p.Crazygood} / G {p.good} / U {p.unsure} / NH {p.nothours} +

+
+ +
+ + + +
+ + {#if msg}

{msg}

{/if} + {#if err}

{err}

{/if} +
+ + diff --git a/src/routes/reviewer/second/decision/+server.js b/src/routes/reviewer/second/decision/+server.js new file mode 100644 index 0000000..b9fbd6a --- /dev/null +++ b/src/routes/reviewer/second/decision/+server.js @@ -0,0 +1,20 @@ +import { json } from '@sveltejs/kit'; +import { getReviewerPermissions, submitSecondDecision } from '$lib/server/reviewer.js'; + +export async function POST({ request, locals }) { + try { + if (!locals.user) return json({ ok: false, error: 'Not logged in' }, { status: 401 }); + + const perms = await getReviewerPermissions(locals.user.recId); + if (!perms.includes('Second')) return json({ ok: false, error: 'No permission' }, { status: 403 }); + + const { projectId, action } = await request.json(); + const reviewerId = locals.user.recId; + + const result = await submitSecondDecision({ projectId, reviewerId, action }); + return json(result); + } catch (e) { + console.error('second decision error', e); + return json({ ok: false, error: e.message ?? 'Unknown error' }, { status: 500 }); + } +} diff --git a/zthoughts/Chris_Notes.txt b/zthoughts/Chris_Notes.txt index 32de3f3..0be84e1 100644 --- a/zthoughts/Chris_Notes.txt +++ b/zthoughts/Chris_Notes.txt @@ -2,7 +2,12 @@ Notes for da tongue: Imported ZOD -Added Airtable stuff: +FOR REVIEWER SYSTEMS: + +Added airtable stuff : + +Projects + User - added new view(BlackholeSubmission) BlackholeSubmissions - new table with fields submission_number @@ -10,17 +15,68 @@ Added Airtable stuff: username(from user table) Project(from projects table) Status (approved/rejected/pending) - CoinsSpent(10) - CoinsBefore - CoinsAfter HackatimeHoursAtSubmission StellarshipsAtSubmission Reviewer(uhh probably gonna link this to user so auth works) Reason + Added env variables: - REVIEWER_PASSWORD - password for reviewer page - gonna change to use field "permissions" thats made - PUBLIC_SHOW_BLACKHOLE - true/false to let others see blackhole + + +Alright changes from here: + +Note that soon once we get the basic net structure up we'll make +it so that a slack bot works so that if a project is accepted/rejected +reviewer feedback will go to the slack user of the project(a user's slack id is stored in airtable) + +And to be clear what fields Projects tab and grid view of each project + user (link to user info view from user tab) + projectid + projectname(single line text) + description(single line text) + hackatimeprojects(single line text) + hoursShipped(Lookup and is a number) + status(single select) + submitted + wip + completed + second + shipURL(URL) + githubURL(URL) + image(attachement) + notMadeBy(single line text) + howToPlay(single line text) + addnComments(single line text) + waitingReview(Rollup) + rollup source = YSWS Project Submission + field - AwardingResults(single line text) + totalCoinsEarned(Rollup) + rollup source = YSWS Project Submission + field - coinsAwarded(number) + + +Fields from User tab and User Info view + do later + +Blackhole review + Like the previous structure, get pending and see project info + Approve or reject + +Basic review + for each project, reviewers can pick from + "this is a crazy good project, i really liked it!" + "this is a good project that seems to have spent the number of hours stated" + "i'm not too sure" + "this does not feel like they spent the number of hours stated" + and then if 2+ people vote 'crazy good', immediately issue 10 coins/hr(check hoursShippedx10 and add it to totalCoinsEarned(Rollup) then change status to finished) + if 2+ people vote 'good' or 'crazy good', immediately issue 9 or 9.5 coins/hr(check hoursShippedx10 and add it to totalCoinsEarned(Rollup) then change status to finished) + if any of the two bottom choices are chosen 2+ times, then it will be given second status and go to second review + +Second review + the second status projects will appear here + +Admin review + will do later + +The main goal is to get blackhole and basic reviews done \ No newline at end of file