Consolidate open PR updates: deployment infrastructure and enhanced documentation#12
Consolidate open PR updates: deployment infrastructure and enhanced documentation#12Copilot wants to merge 2 commits into
Conversation
…cripts, and documentation Co-authored-by: asperpharma <252395498+asperpharma@users.noreply.github.com>
📝 WalkthroughWalkthroughThis pull request introduces comprehensive documentation and testing infrastructure for the Asper Beauty Shop project. It expands project guidelines with detailed design system tokens and architecture specifications, adds three new documentation files covering design systems, project overview, and testing procedures, and creates two new utility scripts for health checking and chatbot testing with associated npm scripts. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (1)
DESIGN_SYSTEM.md (1)
205-205: Prefer requirement wording over absolute accessibility claims.“Meet WCAG AA” should be phrased as an enforced requirement unless backed by ongoing automated/manual audits.
♻️ Suggested wording
-- **Contrast:** All text colors meet WCAG AA standards against their backgrounds +- **Contrast:** All text colors must meet WCAG AA standards against their backgrounds (verify during QA)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@DESIGN_SYSTEM.md` at line 205, The line under the "Contrast" heading currently states an absolute claim ("All text colors meet WCAG AA standards")—change it to an enforceable requirement phrasing and avoid absolute claims unless you run audits; update the "Contrast" bullet to something like "Contrast: All text colors MUST meet WCAG AA standards against their backgrounds, verified via automated checks and periodic manual audits" (or similar mandated wording) and add a note that verification procedures (automated/manual audits) are required to substantiate compliance.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@DESIGN_SYSTEM.md`:
- Line 31: The DESIGN_SYSTEM has conflicting guidance: Line 31 forbids pure
white (`#FFF`) mentioning `asper-stone`/`polished-white` while Lines 162-163
recommend `bg-white`; pick one consistent rule and update docs and code
references accordingly. Replace all mentions of `bg-white` and any instructions
allowing `#FFF` with the single chosen background token `--soft-ivory`
(`#F8F8FF`) in DESIGN_SYSTEM.md, and update the guidance to use the brand tokens
(`--maroon`, `--soft-ivory`, `--shiny-gold`, `--dark-charcoal`) for
src/{components,pages}/**/*.{ts,tsx}; ensure `asper-stone`/`polished-white`
references are removed or aliased to `--soft-ivory` so the document and token
usage stay consistent.
In `@scripts/health-check.js`:
- Around line 141-142: The aggregated check currently pushes only { name:
'Health Endpoint', success: healthCheck.success } which drops diagnostics like
statusCode and error; update the push to include the full diagnostics from the
healthCheck (e.g., spread healthCheck or explicitly include statusCode and
error) so the checks array entry for 'Health Endpoint' contains success,
statusCode and error (affecting the checks array population where
checks.push(...) is used).
- Around line 166-170: The module currently invokes main() unconditionally which
causes process.exit during import and breaks reuse of exported functions
checkEndpoint and checkHealthEndpoint; wrap the call in a runtime entry-point
guard (e.g. if (require.main === module) { main().catch(err => {
console.error('Fatal error:', err); process.exit(1); }); }) so main() only runs
when the file is executed directly and not when imported as a library.
In `@scripts/test-brain.js`:
- Around line 98-104: The current success check uses success =
response.statusCode !== 404 which treats 5xx errors as success; update the
success determination to exclude server errors by checking response.statusCode
is not 404 and is not a 5xx (e.g., require response.statusCode < 500), then keep
the existing console.log lines that print URL and Status unchanged so they
reflect the corrected success value (refer to the success variable and
response.statusCode used in the console.log output).
In `@TEST_BRAIN_AND_CHATBOT.md`:
- Around line 184-194: The "Health Check (includes basic Brain check)" heading
is misleading because the listed checks only verify site availability via "npm
run health"; update the heading and scope text to remove the claim of Brain
coverage and add an explicit instruction that Brain verification is performed
with "npm run test:brain" (e.g., change heading to "Health Check (site
availability)" and add a line directing readers to run "npm run test:brain" for
Brain tests).
---
Nitpick comments:
In `@DESIGN_SYSTEM.md`:
- Line 205: The line under the "Contrast" heading currently states an absolute
claim ("All text colors meet WCAG AA standards")—change it to an enforceable
requirement phrasing and avoid absolute claims unless you run audits; update the
"Contrast" bullet to something like "Contrast: All text colors MUST meet WCAG AA
standards against their backgrounds, verified via automated checks and periodic
manual audits" (or similar mandated wording) and add a note that verification
procedures (automated/manual audits) are required to substantiate compliance.
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
.cursorrulesDESIGN_SYSTEM.mdMAIN_PROJECT.mdTEST_BRAIN_AND_CHATBOT.mdpackage.jsonscripts/health-check.jsscripts/test-brain.js
| | `asper-stone-light` | `#F8F6F3` | Lightest variant, subtle backgrounds | | ||
| | `asper-stone-dark` | `#E8E4DE` | Darker variant for contrast within ivory areas | | ||
|
|
||
| **Never use pure white (`#FFF`)** — always prefer `asper-stone` or `polished-white` for a warmer feel. |
There was a problem hiding this comment.
Resolve conflicting white-color guidance.
Line 31 forbids pure white, but Lines 162-163 still recommend bg-white. Keep one consistent rule to prevent token drift in implementation.
🎨 Suggested fix
-### Inputs
-
-- Background: `bg-white` or `bg-polished-white`
+### Inputs
+
+- Background: `bg-polished-white` (avoid pure white)Based on learnings: Applies to src/{components,pages}/**/*.{ts,tsx} : Follow design tokens consistently: --maroon (#800020) for primary brand color, --soft-ivory (#F8F8FF) for background, --shiny-gold (#C5A028) for accent, --dark-charcoal (#333333) for text.
Also applies to: 162-163
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@DESIGN_SYSTEM.md` at line 31, The DESIGN_SYSTEM has conflicting guidance:
Line 31 forbids pure white (`#FFF`) mentioning `asper-stone`/`polished-white`
while Lines 162-163 recommend `bg-white`; pick one consistent rule and update
docs and code references accordingly. Replace all mentions of `bg-white` and any
instructions allowing `#FFF` with the single chosen background token
`--soft-ivory` (`#F8F8FF`) in DESIGN_SYSTEM.md, and update the guidance to use
the brand tokens (`--maroon`, `--soft-ivory`, `--shiny-gold`, `--dark-charcoal`)
for src/{components,pages}/**/*.{ts,tsx}; ensure `asper-stone`/`polished-white`
references are removed or aliased to `--soft-ivory` so the document and token
usage stay consistent.
| checks.push({ name: 'Health Endpoint', success: healthCheck.success }); | ||
|
|
There was a problem hiding this comment.
Keep health endpoint diagnostics in the aggregated summary.
checks.push({ name: 'Health Endpoint', success: healthCheck.success }) drops statusCode/error, so failed output can become HTTP undefined.
🛠️ Suggested fix
- checks.push({ name: 'Health Endpoint', success: healthCheck.success });
+ checks.push({ name: 'Health Endpoint', ...healthCheck });Also applies to: 159-160
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/health-check.js` around lines 141 - 142, The aggregated check
currently pushes only { name: 'Health Endpoint', success: healthCheck.success }
which drops diagnostics like statusCode and error; update the push to include
the full diagnostics from the healthCheck (e.g., spread healthCheck or
explicitly include statusCode and error) so the checks array entry for 'Health
Endpoint' contains success, statusCode and error (affecting the checks array
population where checks.push(...) is used).
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (5)
scripts/health-check.js (2)
141-142:⚠️ Potential issue | 🟡 MinorPreserve health-endpoint diagnostics in the aggregated result.
Line 141 drops
statusCode/error, so the failure summary at Line 159 can printHTTP undefined.🧩 Suggested fix
- checks.push({ name: 'Health Endpoint', success: healthCheck.success }); + checks.push({ + name: 'Health Endpoint', + success: healthCheck.success, + statusCode: healthCheck.statusCode, + error: healthCheck.error + });Also applies to: 159-160
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/health-check.js` around lines 141 - 142, When pushing the health endpoint result into checks (the object created at "checks.push({ name: 'Health Endpoint', success: healthCheck.success });"), include the diagnostic fields from healthCheck (e.g., statusCode and error) so they are preserved for the aggregated failure summary; also update the aggregation logic that builds the failure message (the code that prints "HTTP ...") to read statusCode and error from the pushed object (e.g., check.statusCode / check.error) instead of only relying on healthCheck.success so the final summary doesn't print "HTTP undefined".
166-170:⚠️ Potential issue | 🟠 MajorAdd a direct-run guard for exported ESM helpers.
Line 167 executes on import and can terminate consumers via
process.exit, which conflicts with exported helper usage.🔒 Suggested fix
import https from 'https'; import http from 'http'; +import { pathToFileURL } from 'url'; @@ // Run if called directly -main().catch(error => { - console.error('Fatal error:', error); - process.exit(1); -}); +const isDirectRun = + process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href; + +if (isDirectRun) { + main().catch(error => { + console.error('Fatal error:', error); + process.exit(1); + }); +}Run this to verify:
#!/bin/bash rg -n "export \{ checkEndpoint, checkHealthEndpoint \};" scripts/health-check.js rg -n "main\(\)\.catch" scripts/health-check.js rg -n "isDirectRun|import\.meta\.url|pathToFileURL" scripts/health-check.jsExpected result:
main().catch(...)should be wrapped in a direct-run check.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/health-check.js` around lines 166 - 170, The direct call to main().catch(...) can run on import and should be guarded so exported ESM helpers (checkEndpoint, checkHealthEndpoint) aren’t causing process.exit when another module imports this file; wrap the main() invocation in a direct-run check that compares import.meta.url to the module's file path (use fileURLToPath/from 'url' and import.meta.url) and only call main() and process.exit on failure when the file is executed directly, adding the necessary import (fileURLToPath) if missing.TEST_BRAIN_AND_CHATBOT.md (1)
184-194:⚠️ Potential issue | 🟡 MinorHealth-check scope is still overstated.
Line 184 and Line 301 imply Brain coverage in
npm run health, but the listed checks are site-availability checks only.📝 Suggested doc fix
-### Health Check (includes basic Brain check) +### Health Check (site availability) @@ **What it checks:** - Main site homepage (200 OK) - `/health` endpoint (200 OK, valid JSON) - Products page loads + +**Note:** Brain/chatbot integration is validated via `npm run test:brain`. @@ -| `npm run health` | Full site health check (includes basic Brain check) | +| `npm run health` | Full site health check (homepage, `/health`, `/products`) |Also applies to: 301-302
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@TEST_BRAIN_AND_CHATBOT.md` around lines 184 - 194, The doc's "Health Check (includes basic Brain check)" and the npm run health description overstate coverage; update the heading and description around "Health Check (includes basic Brain check)" and the "npm run health" bullet list to accurately state that the script performs only site-availability checks (homepage, /health JSON status, products page) and does not exercise or validate the Brain; also apply the same wording change where the doc repeats this claim near the later reference (lines ~301-302) so both occurrences consistently reflect that the check is limited to HTTP/site availability and not Brain functionality.DESIGN_SYSTEM.md (1)
31-31:⚠️ Potential issue | 🟡 MinorUnify the white-background rule in this document.
Line 31 bans pure white, but Lines 162-163 still allow
bg-white. Keep one rule to avoid implementation drift.🛠️ Suggested doc fix
### Inputs -- Background: `bg-white` or `bg-polished-white` +- Background: `bg-polished-white` (avoid pure white) - Border: `border border-rose-clay` - Focus: `focus:ring-2 focus:ring-polished-gold focus:border-polished-gold`Also applies to: 162-163
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@DESIGN_SYSTEM.md` at line 31, The document currently has conflicting rules: the heading "Never use pure white (`#FFF`)" forbids pure white while later lines still allow `bg-white`; unify them by choosing one policy and making both locations consistent—either change the later allowance of `bg-white` (lines referencing `bg-white`) to recommend `asper-stone` or `polished-white` instead, or update the initial rule text "Never use pure white (`#FFF`)" to permit `bg-white`; ensure both the rule line "Never use pure white (`#FFF`)" and the occurrences of `bg-white` use the same wording and rationale so there's a single canonical statement.scripts/test-brain.js (1)
98-104:⚠️ Potential issue | 🟠 MajorDo not treat 5xx as a successful endpoint check.
Line 100 currently passes any non-404 status, including server failures.
🔧 Suggested fix
- // 400, 401, 403 are OK - means endpoint exists but requires auth/valid payload - // 404 means endpoint doesn't exist - const success = response.statusCode !== 404; + // Endpoint existence/contract check: + // 200/400/401/403/405 can indicate the function is present. + // 404 and 5xx should fail. + const allowedStatuses = new Set([200, 400, 401, 403, 405]); + const success = allowedStatuses.has(response.statusCode); @@ - console.log(` Status: ${response.statusCode} ${success ? '(Endpoint exists)' : '(Not found)'}`); + console.log(` Status: ${response.statusCode} ${success ? '(Endpoint exists)' : '(Unexpected status)'}`);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/test-brain.js` around lines 98 - 104, The current check sets success = response.statusCode !== 404 which treats 5xx server errors as successful; update the success calculation to also exclude 5xx codes so that server failures are treated as failures (for example: set success based on response.statusCode !== 404 && response.statusCode < 500 or use a 5xx range check), leaving 400/401/403 treated as OK; adjust the line that declares the success variable (the one referencing response.statusCode) accordingly and keep the logging that follows.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/test-brain.js`:
- Around line 193-197: The script currently calls main() unguarded which
triggers process.exit from main() when this module is imported; wrap the
entrypoint invocation in a Node.js main-check (e.g. only call main() when the
module is run directly) so importing modules can safely use the exported helpers
(testSupabaseConnection, testBeautyAssistantEndpoint, testConciergePresence)
without the process being terminated; update the invocation that currently calls
main().catch(... ) to run only when the module is the entrypoint (require.main
=== module or equivalent in ESM) and keep the error logging/exit behavior inside
that guarded block.
---
Duplicate comments:
In `@DESIGN_SYSTEM.md`:
- Line 31: The document currently has conflicting rules: the heading "Never use
pure white (`#FFF`)" forbids pure white while later lines still allow
`bg-white`; unify them by choosing one policy and making both locations
consistent—either change the later allowance of `bg-white` (lines referencing
`bg-white`) to recommend `asper-stone` or `polished-white` instead, or update
the initial rule text "Never use pure white (`#FFF`)" to permit `bg-white`;
ensure both the rule line "Never use pure white (`#FFF`)" and the occurrences of
`bg-white` use the same wording and rationale so there's a single canonical
statement.
In `@scripts/health-check.js`:
- Around line 141-142: When pushing the health endpoint result into checks (the
object created at "checks.push({ name: 'Health Endpoint', success:
healthCheck.success });"), include the diagnostic fields from healthCheck (e.g.,
statusCode and error) so they are preserved for the aggregated failure summary;
also update the aggregation logic that builds the failure message (the code that
prints "HTTP ...") to read statusCode and error from the pushed object (e.g.,
check.statusCode / check.error) instead of only relying on healthCheck.success
so the final summary doesn't print "HTTP undefined".
- Around line 166-170: The direct call to main().catch(...) can run on import
and should be guarded so exported ESM helpers (checkEndpoint,
checkHealthEndpoint) aren’t causing process.exit when another module imports
this file; wrap the main() invocation in a direct-run check that compares
import.meta.url to the module's file path (use fileURLToPath/from 'url' and
import.meta.url) and only call main() and process.exit on failure when the file
is executed directly, adding the necessary import (fileURLToPath) if missing.
In `@scripts/test-brain.js`:
- Around line 98-104: The current check sets success = response.statusCode !==
404 which treats 5xx server errors as successful; update the success calculation
to also exclude 5xx codes so that server failures are treated as failures (for
example: set success based on response.statusCode !== 404 && response.statusCode
< 500 or use a 5xx range check), leaving 400/401/403 treated as OK; adjust the
line that declares the success variable (the one referencing
response.statusCode) accordingly and keep the logging that follows.
In `@TEST_BRAIN_AND_CHATBOT.md`:
- Around line 184-194: The doc's "Health Check (includes basic Brain check)" and
the npm run health description overstate coverage; update the heading and
description around "Health Check (includes basic Brain check)" and the "npm run
health" bullet list to accurately state that the script performs only
site-availability checks (homepage, /health JSON status, products page) and does
not exercise or validate the Brain; also apply the same wording change where the
doc repeats this claim near the later reference (lines ~301-302) so both
occurrences consistently reflect that the check is limited to HTTP/site
availability and not Brain functionality.
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
.cursorrulesDESIGN_SYSTEM.mdMAIN_PROJECT.mdTEST_BRAIN_AND_CHATBOT.mdpackage.jsonscripts/health-check.jsscripts/test-brain.js
| // Run if called directly | ||
| main().catch(error => { | ||
| console.error('Fatal error:', error); | ||
| process.exit(1); | ||
| }); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
cd /tmp && pwd
rg -n "export \{ testSupabaseConnection, testBeautyAssistantEndpoint, testConciergePresence \};" scripts/test-brain.js
echo "---"
rg -n "main\(\)\.catch" scripts/test-brain.js
echo "---"
rg -n "isDirectRun|import\.meta\.url|pathToFileURL" scripts/test-brain.jsRepository: asperpharma/understand-project
Length of output: 289
🏁 Script executed:
fd -t f "test-brain\.js" .Repository: asperpharma/understand-project
Length of output: 97
🏁 Script executed:
cat -n ./scripts/test-brain.js | sed -n '185,210p'Repository: asperpharma/understand-project
Length of output: 693
🏁 Script executed:
rg -n "import\.meta\.url|pathToFileURL|isDirectRun" ./scripts/test-brain.jsRepository: asperpharma/understand-project
Length of output: 56
🏁 Script executed:
wc -l ./scripts/test-brain.jsRepository: asperpharma/understand-project
Length of output: 101
🏁 Script executed:
head -15 ./scripts/test-brain.jsRepository: asperpharma/understand-project
Length of output: 501
Guard the script entrypoint before invoking main().
Line 194 runs on import. With process.exit(...) in main, any importer of the exported helper functions (testSupabaseConnection, testBeautyAssistantEndpoint, testConciergePresence) gets terminated.
🛠️ Suggested fix
import https from 'https';
import http from 'http';
+import { pathToFileURL } from 'url';
@@
// Run if called directly
-main().catch(error => {
- console.error('Fatal error:', error);
- process.exit(1);
-});
+const isDirectRun =
+ process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href;
+
+if (isDirectRun) {
+ main().catch(error => {
+ console.error('Fatal error:', error);
+ process.exit(1);
+ });
+}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Run if called directly | |
| main().catch(error => { | |
| console.error('Fatal error:', error); | |
| process.exit(1); | |
| }); | |
| import https from 'https'; | |
| import http from 'http'; | |
| import { pathToFileURL } from 'url'; | |
| // ... (rest of the file content) ... | |
| // Run if called directly | |
| const isDirectRun = | |
| process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href; | |
| if (isDirectRun) { | |
| main().catch(error => { | |
| console.error('Fatal error:', error); | |
| process.exit(1); | |
| }); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@scripts/test-brain.js` around lines 193 - 197, The script currently calls
main() unguarded which triggers process.exit from main() when this module is
imported; wrap the entrypoint invocation in a Node.js main-check (e.g. only call
main() when the module is run directly) so importing modules can safely use the
exported helpers (testSupabaseConnection, testBeautyAssistantEndpoint,
testConciergePresence) without the process being terminated; update the
invocation that currently calls main().catch(... ) to run only when the module
is the entrypoint (require.main === module or equivalent in ESM) and keep the
error logging/exit behavior inside that guarded block.
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (6)
scripts/test-brain.js (2)
194-197:⚠️ Potential issue | 🟠 MajorGuard the script entrypoint before invoking
main().Line 194 runs on import, so consumers of exported helpers can get terminated by
process.exit.🔧 Suggested fix
import https from 'https'; import http from 'http'; +import { pathToFileURL } from 'url'; @@ -// Run if called directly -main().catch(error => { - console.error('Fatal error:', error); - process.exit(1); -}); +// Run only when called directly +const isDirectRun = + process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href; + +if (isDirectRun) { + main().catch((error) => { + console.error('Fatal error:', error); + process.exit(1); + }); +}#!/bin/bash # Verify exports exist alongside an unguarded entrypoint invocation. rg -nP --type=js -C2 '^export\s*\{[^}]*testSupabaseConnection[^}]*testBeautyAssistantEndpoint[^}]*testConciergePresence[^}]*\};' scripts/test-brain.js rg -nP --type=js -C2 '^\s*main\(\)\.catch\(' scripts/test-brain.js rg -nP --type=js -C2 'import\.meta\.url|pathToFileURL|require\.main' scripts/test-brain.jsExpected result: export + unguarded
main().catch(...)present, and no direct-run guard found.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/test-brain.js` around lines 194 - 197, The script currently calls main().catch(...) on import which can terminate consumers; change the entrypoint to only invoke main() when the file is run directly by adding a direct-run guard (e.g., if (require && require.main === module) { main().catch(...) } or for ESM if (import.meta.url === pathToFileURL(process.argv[1]).href) { main().catch(...) }); keep the existing exported helpers (testSupabaseConnection, testBeautyAssistantEndpoint, testConciergePresence) unchanged and ensure the unguarded process.exit path is only inside the guarded block so imports do not call process.exit.
98-104:⚠️ Potential issue | 🟠 MajorDo not treat 5xx as endpoint-success.
Line 100 currently passes any non-404 status, including 500/502/503.
🛠️ Suggested fix
- // 400, 401, 403 are OK - means endpoint exists but requires auth/valid payload - // 404 means endpoint doesn't exist - const success = response.statusCode !== 404; + // Endpoint exists for these expected contract responses. + // 404 (missing) and 5xx (server failure) should fail. + const allowedStatuses = new Set([200, 400, 401, 403, 405]); + const success = allowedStatuses.has(response.statusCode);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/test-brain.js` around lines 98 - 104, The current success calculation treats any non-404 status as success, which wrongly counts 5xx errors; update the success assignment in scripts/test-brain.js (the success variable that uses response.statusCode) to exclude 5xx responses — e.g., consider success only when status is not 404 and is not in the 500–599 range (or equivalently when statusCode < 500 and statusCode !== 404) so 5xx responses are not reported as endpoint-success.scripts/health-check.js (2)
141-142:⚠️ Potential issue | 🟡 MinorKeep health endpoint diagnostics in the aggregated summary.
Line 141 drops
statusCode/error, so failed output at Line 159 can becomeHTTP undefined.🛠️ Suggested fix
- checks.push({ name: 'Health Endpoint', success: healthCheck.success }); + checks.push({ name: 'Health Endpoint', ...healthCheck });Also applies to: 159-160
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/health-check.js` around lines 141 - 142, The aggregated checks entry currently only stores healthCheck.success which loses diagnostics; update the push that builds the checks array (the object pushed where checks.push({ name: 'Health Endpoint', success: healthCheck.success })) to include the diagnostic fields from the healthCheck object (e.g., statusCode and error) so the final summary can render proper details instead of "HTTP undefined" — for example push { name: 'Health Endpoint', success: healthCheck.success, statusCode: healthCheck.statusCode, error: healthCheck.error } (and make the same change where the health summary is assembled near the later health output).
167-170:⚠️ Potential issue | 🟠 MajorGuard
main()so imports don't auto-exit the process.Line 167 runs on every import, which breaks reuse of exported helpers and can terminate callers via
process.exit.🔧 Suggested fix
import https from 'https'; import http from 'http'; +import { pathToFileURL } from 'url'; @@ -// Run if called directly -main().catch(error => { - console.error('Fatal error:', error); - process.exit(1); -}); +// Run only when called directly +const isDirectRun = + process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href; + +if (isDirectRun) { + main().catch((error) => { + console.error('Fatal error:', error); + process.exit(1); + }); +}#!/bin/bash # Verify exported helpers coexist with an unguarded entrypoint and no direct-run guard. rg -nP --type=js -C2 '^export\s*\{[^}]*checkEndpoint[^}]*checkHealthEndpoint[^}]*\};' scripts/health-check.js rg -nP --type=js -C2 '^\s*main\(\)\.catch\(' scripts/health-check.js rg -nP --type=js -C2 'import\.meta\.url|pathToFileURL|require\.main' scripts/health-check.jsExpected result: export + unguarded
main().catch(...)present, and no guard pattern found.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/health-check.js` around lines 167 - 170, The unguarded call to main() (the lines containing main().catch(...)) runs on every import and can terminate callers; wrap the direct-run invocation so exported helpers like checkEndpoint and checkHealthEndpoint can be imported without executing main or calling process.exit. Specifically, stop calling main() unconditionally and instead invoke it only when the module is executed directly (use the appropriate direct-run guard for the module system in use), preserving the main().catch(...) error handling inside that guarded block so imports do not auto-exit the process.DESIGN_SYSTEM.md (1)
31-31:⚠️ Potential issue | 🟡 MinorResolve the conflicting white-background rule.
Line 31 bans pure white, but Line 162 still allows
bg-white, so implementation guidance is inconsistent.🎨 Suggested doc fix
### Inputs -- Background: `bg-white` or `bg-polished-white` +- Background: `bg-polished-white` (avoid pure white) - Border: `border border-rose-clay` - Focus: `focus:ring-2 focus:ring-polished-gold focus:border-polished-gold` - Text: `text-asper-ink`Also applies to: 162-163
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@DESIGN_SYSTEM.md` at line 31, The doc contains a contradiction: Line 31 bans pure white `#FFF` and recommends using tokens `asper-stone` or `polished-white`, while later text still permits `bg-white`; make them consistent by either (A) prohibiting `bg-white` everywhere and replacing mentions of `bg-white` with the approved tokens (`asper-stone`/`polished-white`) or (B) explicitly allowing `bg-white` but documenting it maps to the token `polished-white` (and remove the literal `#FFF` ban), update the relevant references to `bg-white`, `#FFF`, and the token recommendations so the rule is unambiguous.TEST_BRAIN_AND_CHATBOT.md (1)
184-194:⚠️ Potential issue | 🟡 MinorClarify health-check scope; it does not validate Brain integration.
Line 184 and Line 301 claim Brain coverage, but the listed checks are site availability only.
📝 Suggested doc fix
-### Health Check (includes basic Brain check) +### Health Check (site availability) @@ **What it checks:** - Main site homepage (200 OK) - `/health` endpoint (200 OK, valid JSON) - Products page loads + +**Note:** Brain/chatbot integration is validated via `npm run test:brain`. @@ -| `npm run health` | Full site health check (includes basic Brain check) | +| `npm run health` | Full site health check (site availability) |Also applies to: 301-302
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@TEST_BRAIN_AND_CHATBOT.md` around lines 184 - 194, Update the "Health Check (includes basic Brain check)" heading and its description to accurately reflect that `npm run health` only verifies site availability (homepage, /health JSON, products page) and does not validate Brain integration; specifically, remove or revise the phrase "includes basic Brain check" in the heading and any statements at the later occurrence that imply Brain coverage (the header text "Health Check (includes basic Brain check)" and the related bullets under the `npm run health` example), and add a short note stating Brain integration is not validated by this command and must be tested separately.
🧹 Nitpick comments (1)
MAIN_PROJECT.md (1)
176-181: Add build/preview validation to this test step.This section should include production build + preview checks to match the deployment workflow used by the team.
🧪 Suggested doc update
5. **Run tests:** ```bash - npm test # Run unit tests + npm run build # Validate production build + npm run preview # Validate production output locally + npm test # Run unit tests (if present) npm run health # Check deployed site health npm run test:brain # Test AI assistant integration ```Based on learnings: Validate all changes via
npm run buildandnpm run previewbefore deployment; no unit tests in repo, rely on manual testing.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@MAIN_PROJECT.md` around lines 176 - 181, The docs' "Run tests" step is missing production build and preview validation; update the step so the sequence runs the production build and preview before tests/deploy by adding instructions to run the "npm run build" and "npm run preview" scripts prior to "npm test" (and keep "npm run health" and "npm run test:brain"); reference the script names npm run build, npm run preview, npm test, npm run health, and npm run test:brain when making the change so readers validate the production output locally and catch build issues early.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@MAIN_PROJECT.md`:
- Line 88: The fenced code block showing the project tree is missing a language
tag which triggers markdownlint MD040; update the opening triple-backtick for
that block to include a language (e.g., change ``` to ```text) so the block
becomes ```text and leave the contents unchanged to satisfy the linter.
---
Duplicate comments:
In `@DESIGN_SYSTEM.md`:
- Line 31: The doc contains a contradiction: Line 31 bans pure white `#FFF` and
recommends using tokens `asper-stone` or `polished-white`, while later text
still permits `bg-white`; make them consistent by either (A) prohibiting
`bg-white` everywhere and replacing mentions of `bg-white` with the approved
tokens (`asper-stone`/`polished-white`) or (B) explicitly allowing `bg-white`
but documenting it maps to the token `polished-white` (and remove the literal
`#FFF` ban), update the relevant references to `bg-white`, `#FFF`, and the token
recommendations so the rule is unambiguous.
In `@scripts/health-check.js`:
- Around line 141-142: The aggregated checks entry currently only stores
healthCheck.success which loses diagnostics; update the push that builds the
checks array (the object pushed where checks.push({ name: 'Health Endpoint',
success: healthCheck.success })) to include the diagnostic fields from the
healthCheck object (e.g., statusCode and error) so the final summary can render
proper details instead of "HTTP undefined" — for example push { name: 'Health
Endpoint', success: healthCheck.success, statusCode: healthCheck.statusCode,
error: healthCheck.error } (and make the same change where the health summary is
assembled near the later health output).
- Around line 167-170: The unguarded call to main() (the lines containing
main().catch(...)) runs on every import and can terminate callers; wrap the
direct-run invocation so exported helpers like checkEndpoint and
checkHealthEndpoint can be imported without executing main or calling
process.exit. Specifically, stop calling main() unconditionally and instead
invoke it only when the module is executed directly (use the appropriate
direct-run guard for the module system in use), preserving the main().catch(...)
error handling inside that guarded block so imports do not auto-exit the
process.
In `@scripts/test-brain.js`:
- Around line 194-197: The script currently calls main().catch(...) on import
which can terminate consumers; change the entrypoint to only invoke main() when
the file is run directly by adding a direct-run guard (e.g., if (require &&
require.main === module) { main().catch(...) } or for ESM if (import.meta.url
=== pathToFileURL(process.argv[1]).href) { main().catch(...) }); keep the
existing exported helpers (testSupabaseConnection, testBeautyAssistantEndpoint,
testConciergePresence) unchanged and ensure the unguarded process.exit path is
only inside the guarded block so imports do not call process.exit.
- Around line 98-104: The current success calculation treats any non-404 status
as success, which wrongly counts 5xx errors; update the success assignment in
scripts/test-brain.js (the success variable that uses response.statusCode) to
exclude 5xx responses — e.g., consider success only when status is not 404 and
is not in the 500–599 range (or equivalently when statusCode < 500 and
statusCode !== 404) so 5xx responses are not reported as endpoint-success.
In `@TEST_BRAIN_AND_CHATBOT.md`:
- Around line 184-194: Update the "Health Check (includes basic Brain check)"
heading and its description to accurately reflect that `npm run health` only
verifies site availability (homepage, /health JSON, products page) and does not
validate Brain integration; specifically, remove or revise the phrase "includes
basic Brain check" in the heading and any statements at the later occurrence
that imply Brain coverage (the header text "Health Check (includes basic Brain
check)" and the related bullets under the `npm run health` example), and add a
short note stating Brain integration is not validated by this command and must
be tested separately.
---
Nitpick comments:
In `@MAIN_PROJECT.md`:
- Around line 176-181: The docs' "Run tests" step is missing production build
and preview validation; update the step so the sequence runs the production
build and preview before tests/deploy by adding instructions to run the "npm run
build" and "npm run preview" scripts prior to "npm test" (and keep "npm run
health" and "npm run test:brain"); reference the script names npm run build, npm
run preview, npm test, npm run health, and npm run test:brain when making the
change so readers validate the production output locally and catch build issues
early.
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
.cursorrulesDESIGN_SYSTEM.mdMAIN_PROJECT.mdTEST_BRAIN_AND_CHATBOT.mdpackage.jsonscripts/health-check.jsscripts/test-brain.js
Consolidates updates from open PRs #4 and #8. Skips #9 (conflicts with merged #11 on Supabase ID) and #10 (verification-only, no changes).
Enhanced Repository Configuration
.cursorrules - Expanded with production-ready deployment guidance:
asper-stone,rose-clay,burgundy,polished-gold, etc.)Deployment Infrastructure
Scripts - ES module-based health checks and integration tests:
scripts/health-check.js- Validates deployed site (homepage, /health, /products endpoints)scripts/test-brain.js- Tests AI assistant (Supabase connectivity, Edge Functions, widget presence)package.json- Addednpm run healthandnpm run test:brainDocumentation - Comprehensive project references:
DESIGN_SYSTEM.md- Brand identity, color tokens, typography, component patternsMAIN_PROJECT.md- Tech stack, features, integrations, deployment workflowsTEST_BRAIN_AND_CHATBOT.md- Testing procedures (10-step manual checklist, automated tests)Why PR #9 Was Skipped
PR #9 migrates Supabase ID from
qqceibvalkoytafynwoc→rgehleqcubtmcwyipyvi.PR #11 (already merged) did the opposite, confirming
qqceibvalkoytafynwocas correct.Applying #9 would reverse the correct configuration.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.
Summary by CodeRabbit
Documentation
Tests
Chores