chore(style): codebase em-dash sweep + minor layout polish
Some checks failed
Build & Push Docker Images / lint (push) Failing after 1m18s
Build & Push Docker Images / build-and-push (push) Has been skipped

Replaces every em-dash and en-dash with regular ASCII hyphens
across comments, JSX strings, and dev-facing logs. Mostly cosmetic
but stops the inconsistent mix that crept in over the last few
months (some files used em-dashes in comments, others didn't,
some used both).

Bundles two small dashboard-layout tweaks that touch a couple of
already-modified files:
- (dashboard)/layout.tsx main padding goes from p-6 to pt-3 px-6
  pb-6 so page content sits closer to the topbar.
- Sidebar now receives the ports list it needs for the footer
  port switcher.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt Ciaccio
2026-05-04 22:57:01 +02:00
parent d62822c284
commit 8699f81879
225 changed files with 844 additions and 845 deletions

View File

@@ -13,7 +13,7 @@ interface RecurringJobDef {
*/
export async function registerRecurringJobs(): Promise<void> {
const recurring: RecurringJobDef[] = [
// Documenso signature fallback poll primary is webhooks, this is safety net
// Documenso signature fallback poll - primary is webhooks, this is safety net
{ queue: 'documents', name: 'signature-poll', pattern: '0 */6 * * *' },
// Reminder checks
@@ -37,10 +37,10 @@ export async function registerRecurringJobs(): Promise<void> {
// Session cleanup
{ queue: 'maintenance', name: 'session-cleanup', pattern: '0 4 * * *' },
// Report scheduler checks every minute for reports due to run
// Report scheduler - checks every minute for reports due to run
{ queue: 'reports', name: 'report-scheduler', pattern: '* * * * *' },
// Notification digest configurable per user; placeholder fires hourly
// Notification digest - configurable per user; placeholder fires hourly
// TODO(L2): make per-user schedule configurable (read from user_settings)
{ queue: 'email', name: 'notification-digest', pattern: '0 * * * *' },
@@ -53,7 +53,7 @@ export async function registerRecurringJobs(): Promise<void> {
// Phase B: analytics snapshot warm
{ queue: 'maintenance', name: 'analytics-refresh', pattern: '*/15 * * * *' },
// Phase 3d: GDPR Article 17 actually delete expired export bundles
// Phase 3d: GDPR Article 17 - actually delete expired export bundles
{ queue: 'maintenance', name: 'gdpr-export-cleanup', pattern: '0 4 * * *' },
// Phase 3b: AI usage ledger retention (90-day rolling window)
{ queue: 'maintenance', name: 'ai-usage-retention', pattern: '0 5 * * *' },

View File

@@ -27,7 +27,7 @@ interface DraftResult {
async function generateEmailDraft(payload: GenerateEmailDraftPayload): Promise<DraftResult> {
const { interestId, clientId, portId, context, additionalInstructions } = payload;
// Fetch data by IDs in the worker never trust PII from the queue payload
// Fetch data by IDs in the worker - never trust PII from the queue payload
const { db } = await import('@/lib/db');
const { interests } = await import('@/lib/db/schema/interests');
const { clients } = await import('@/lib/db/schema/clients');
@@ -36,7 +36,7 @@ async function generateEmailDraft(payload: GenerateEmailDraftPayload): Promise<D
const { emailThreads } = await import('@/lib/db/schema/email');
const { and, eq, desc } = await import('drizzle-orm');
// Fetch interest, client, berth both lookups port-scoped so a
// Fetch interest, client, berth - both lookups port-scoped so a
// crafted job payload cannot exfiltrate foreign-tenant data.
const [interest, client] = await Promise.all([
db.query.interests.findFirst({

View File

@@ -11,7 +11,7 @@ export const importWorker = new Worker(
// TODO(L2): implement import job handlers
// - CSV client import
// - Excel berth spec import
// - Note: maxAttempts=1 imports are idempotent, user retries manually
// - Note: maxAttempts=1 - imports are idempotent, user retries manually
},
{
connection: { url: process.env.REDIS_URL! } as ConnectionOptions,

View File

@@ -73,13 +73,13 @@ export const webhooksWorker = new Worker(
const { createNotification } = await import('@/lib/services/notifications.service');
const { eq, and } = await import('drizzle-orm');
// 1. Fetch webhook skip if deleted
// 1. Fetch webhook - skip if deleted
const webhook = await db.query.webhooks.findFirst({
where: eq(webhooks.id, webhookId),
});
if (!webhook) {
logger.info({ webhookId }, 'Webhook deleted skipping delivery');
logger.info({ webhookId }, 'Webhook deleted - skipping delivery');
await db.delete(webhookDeliveries).where(eq(webhookDeliveries.id, deliveryId));
return;
}
@@ -92,7 +92,7 @@ export const webhooksWorker = new Worker(
if (process.env.EMAIL_REDIRECT_TO) {
logger.info(
{ webhookId, deliveryId, url: webhook.url },
'Webhook delivery skipped (EMAIL_REDIRECT_TO is set outbound comms are paused)',
'Webhook delivery skipped (EMAIL_REDIRECT_TO is set - outbound comms are paused)',
);
await db
.update(webhookDeliveries)
@@ -227,7 +227,7 @@ export const webhooksWorker = new Worker(
logger.error(
{ webhookId, deliveryId, event, attempt },
'Webhook delivery permanently failed dead_letter',
'Webhook delivery permanently failed - dead_letter',
);
// Notify all super admins