From 496df474b898c1a27d22201d65642580b4db038b Mon Sep 17 00:00:00 2001 From: Andraxion Date: Sat, 27 Jun 2026 02:03:43 -0400 Subject: [PATCH] Tighten request board layout --- server.js | 6 +- src/WorldshaperLauncher.tsx | 1077 ++++++++++++++++------------------- src/index.css | 211 ++++--- 3 files changed, 622 insertions(+), 672 deletions(-) diff --git a/server.js b/server.js index 656aba0..caf42fc 100644 --- a/server.js +++ b/server.js @@ -454,7 +454,11 @@ function createLauncherRequestId() { } function normalizeLauncherRequestStatus(value) { - return String(value || "").trim().toLowerCase() === "active" ? "active" : "pending"; + const normalized = String(value || "").trim().toLowerCase(); + if (normalized === "active" || normalized === "implemented") { + return normalized; + } + return "pending"; } function normalizeLauncherRequestTags(value) { diff --git a/src/WorldshaperLauncher.tsx b/src/WorldshaperLauncher.tsx index ea96cb9..f7efd48 100644 --- a/src/WorldshaperLauncher.tsx +++ b/src/WorldshaperLauncher.tsx @@ -21,6 +21,7 @@ type WorldDefaultPayload = { type LaunchState = "ready" | "opening" | "opened" | "blocked" | "error"; type BoardTab = "news" | "requests"; type LauncherWindowMode = "public" | "admin"; +type LauncherRequestStatus = "pending" | "active" | "implemented"; type LauncherRequestAnalysisRouting = { summary?: string; @@ -38,7 +39,7 @@ type LauncherRequest = { id: string; sourceSubmissionId?: string; title: string; - status: "pending" | "active"; + status: LauncherRequestStatus; category: string; tags: string[]; sourceText: string; @@ -145,6 +146,38 @@ function readLauncherWindowMode(): LauncherWindowMode { return searchParams.get("admin") === "requests" ? "admin" : "public"; } +function normalizeCommaSeparatedList(value: string): string[] { + return value + .split(",") + .map((entry) => entry.trim()) + .filter(Boolean); +} + +function SaveIcon() { + return ( + + ); +} + +function CheckIcon() { + return ( + + ); +} + +function PlayIcon() { + return ( + + ); +} + async function resolveDefaultWorldId(): Promise { const response = await fetch("/api/world-default"); if (!response.ok) { @@ -193,137 +226,6 @@ function cloneLauncherRequest(requestEntry: LauncherRequest): LauncherRequest { return JSON.parse(JSON.stringify(requestEntry)) as LauncherRequest; } -function getPrimaryAnalysisItem(requestEntry: LauncherRequest): LauncherRequestAnalysisItem | null { - const items = Array.isArray(requestEntry.analysis?.items) ? requestEntry.analysis?.items : []; - return items.length > 0 ? items[0] : null; -} - -function formatConfidence(value: number | null | undefined): string { - if (!Number.isFinite(Number(value))) { - return "Unscored"; - } - return `${Math.round(Number(value) * 100)}%`; -} - -function escapePopupHtml(value: string): string { - return String(value || "") - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'"); -} - -function openReviewDetailsPopup(requestEntry: LauncherRequest): void { - const popup = window.open("", `worldshaper-review-${requestEntry.id}`, "popup=yes,width=840,height=760,resizable=yes,scrollbars=yes"); - if (!popup) { - return; - } - const routing = requestEntry.analysis?.routing; - const items = Array.isArray(requestEntry.analysis?.items) ? requestEntry.analysis.items : []; - const renderedItems = items.map((item, index) => { - const reviewOptions = Array.isArray(item?.reviewOptions) ? item.reviewOptions : []; - return ` -
-
Review Item ${index + 1}
-

${escapePopupHtml(String(item?.title || `Request ${index + 1}`))}

-
- ${escapePopupHtml(String(item?.primaryCategory || "Unsorted"))} - ${escapePopupHtml(String(item?.statusRecommendation || "needs_review"))} - ${escapePopupHtml(formatConfidence(item?.confidence))} -
-
-

Review Rationale

-

${escapePopupHtml(String(item?.reviewRationale || "No structured review rationale was returned."))}

-
-
-

Parsed Interpretation

-

${escapePopupHtml(String(item?.parsedInterpretation || ""))}

-
-
-

Implementation Approach

-

${escapePopupHtml(String(item?.implementationApproach || ""))}

-
-
-

Possible Options

- ${reviewOptions.length > 0 - ? `
    ${reviewOptions.map((option) => `
  • ${escapePopupHtml(String(option || ""))}
  • `).join("")}
` - : "

No structured options were returned.

"} -
-
-

Notes

-

${escapePopupHtml(String(item?.notes || "No extra notes."))}

-
-
- `; - }).join(""); - popup.document.open(); - popup.document.write(` - - - - Worldshaper Review Details - - - -
-
-

${escapePopupHtml(requestEntry.title)}

-

${escapePopupHtml(requestEntry.sourceText)}

-
- ${routing ? ` -
-
Routing Summary
-

${escapePopupHtml(String(routing.summary || "KB routing context"))}

-
- Ambiguity: ${escapePopupHtml(String(routing.ambiguity || "medium"))} - ${(Array.isArray(routing.suggestedTags) ? routing.suggestedTags : []).map((tag) => `${escapePopupHtml(tag)}`).join("")} -
-
-

Rationale

-

${escapePopupHtml(String(routing.rationale || "No routing rationale was stored."))}

-
-
-

Matched Terms

- ${(Array.isArray(routing.matchedTerms) && routing.matchedTerms.length > 0) - ? `
    ${routing.matchedTerms.map((term) => `
  • ${escapePopupHtml(String(term || ""))}
  • `).join("")}
` - : "

No explicit terminology matches were stored.

"} -
-
-

Likely Systems

- ${(Array.isArray(routing.suggestedSystems) && routing.suggestedSystems.length > 0) - ? `
    ${routing.suggestedSystems.map((systemId) => `
  • ${escapePopupHtml(String(systemId || ""))}
  • `).join("")}
` - : "

No likely systems were stored.

"} -
-
-

Possible Directions

- ${(Array.isArray(routing.possibleDirections) && routing.possibleDirections.length > 0) - ? `
    ${routing.possibleDirections.map((direction) => `
  • ${escapePopupHtml(String(direction || ""))}
  • `).join("")}
` - : "

No alternate directions were stored.

"} -
-
- ` : ""} - ${renderedItems || '

No Review Items

This request does not have structured review details yet.

'} -
- - `); - popup.document.close(); -} - function formatRequestTimestamp(value: string): string { const parsed = Date.parse(String(value || "")); if (!Number.isFinite(parsed)) { @@ -337,10 +239,6 @@ function formatRequestTimestamp(value: string): string { }).format(parsed); } -function formatRequestStatusLabel(status: "pending" | "active"): string { - return status === "active" ? "Active" : "Pending"; -} - function normalizeAnalysisState(value: string | undefined): string { return String(value || "").trim().toLowerCase(); } @@ -363,6 +261,9 @@ function formatAnalysisStateLabel(value: string | undefined): string { } function getRequestDisplayStateLabel(requestEntry: LauncherRequest): string { + if (requestEntry.status === "implemented") { + return "Implemented"; + } if (requestEntry.status === "active") { return "Active"; } @@ -383,6 +284,9 @@ function getRequestDisplayStateLabel(requestEntry: LauncherRequest): string { } function getRequestDisplayStateClassName(requestEntry: LauncherRequest): string { + if (requestEntry.status === "implemented") { + return "implemented"; + } if (requestEntry.status === "active") { return "active"; } @@ -504,6 +408,7 @@ function WorldshaperLauncher() { const [adminAuthSubmitting, setAdminAuthSubmitting] = useState(false); const [adminPasswordError, setAdminPasswordError] = useState(""); const [selectedAdminRequestId, setSelectedAdminRequestId] = useState(""); + const [selectedAdminAnalysisIndex, setSelectedAdminAnalysisIndex] = useState(0); const [adminEditorDraft, setAdminEditorDraft] = useState(null); const [adminSaving, setAdminSaving] = useState(false); const [recentSaveEvents, setRecentSaveEvents] = useState([]); @@ -671,6 +576,10 @@ function WorldshaperLauncher() { setAdminEditorDraft(cloneLauncherRequest(requests[0])); }, [adminPanelOpen, adminAccessGranted, requests, selectedAdminRequestId, adminEditorDraft]); + useEffect(() => { + setSelectedAdminAnalysisIndex(0); + }, [selectedAdminRequestId]); + async function handleLaunch(): Promise { setError(""); const nextWorldId = worldId || DEFAULT_EDITOR_WORLD_ID_FALLBACK; @@ -766,6 +675,7 @@ function WorldshaperLauncher() { function handleSelectAdminRequest(requestId: string): void { const nextRequest = requests.find((entry) => entry.id === requestId); setSelectedAdminRequestId(requestId); + setSelectedAdminAnalysisIndex(0); setAdminEditorDraft(nextRequest ? cloneLauncherRequest(nextRequest) : null); setAdminNotice(""); setAdminPasswordError(""); @@ -1053,6 +963,7 @@ function WorldshaperLauncher() { const requestCount = requests.length; const pendingRequestCount = requests.filter((entry) => entry.status === "pending").length; const activeRequestCount = requests.filter((entry) => entry.status === "active").length; + const implementedRequestCount = requests.filter((entry) => entry.status === "implemented").length; const queuedPendingRequestCount = requests.filter(isQueuedPendingRequest).length; const needsReviewRequestCount = requests.filter(isNeedsReviewRequest).length; const requestTags = (allowedRequestTags.length > 0 @@ -1063,6 +974,12 @@ function WorldshaperLauncher() { .map((entry) => String(entry || "").trim()) .filter(Boolean), ))).sort((a, b) => a.localeCompare(b)); + const requestTagFilterOptions = requestTags + .map((tag) => ({ + tag, + count: requests.filter((entry) => entry.status !== "pending" && entry.tags.includes(tag)).length, + })) + .filter((entry) => entry.count > 0); const filteredRequests = requests.filter((entry) => { if (requestFilter === "status:pending") { return entry.status === "pending"; @@ -1076,18 +993,22 @@ function WorldshaperLauncher() { if (requestFilter === "status:active") { return entry.status === "active"; } + if (requestFilter === "status:implemented") { + return entry.status === "implemented"; + } if (requestFilter.startsWith("tag:")) { const tag = requestFilter.slice(4); - return entry.status === "active" && entry.tags.includes(tag); + return entry.status !== "pending" && entry.tags.includes(tag); } return true; }); const boardTitle = adminWindowMode ? "Worldshaper Admin" : "Worldshaper Board"; const boardHint = adminWindowMode - ? `${queuedPendingRequestCount} queued, ${needsReviewRequestCount} review, ${activeRequestCount} active` + ? `${queuedPendingRequestCount} queued, ${needsReviewRequestCount} review, ${activeRequestCount} active, ${implementedRequestCount} implemented` : (activeBoardTab === "news" ? "Latest announcements" - : `${queuedPendingRequestCount} queued, ${needsReviewRequestCount} review, ${activeRequestCount} active`); + : `${queuedPendingRequestCount} queued, ${needsReviewRequestCount} review, ${activeRequestCount} active, ${implementedRequestCount} implemented`); + const selectedAnalysisItem = adminEditorDraft?.analysis?.items?.[selectedAdminAnalysisIndex] || null; return (
{adminWindowMode ? "Protected Review Workspace" : "Shared Request Board"}
{adminWindowMode ? "Admin Review Console" : "Requests"}
- {requestCount} saved request{requestCount === 1 ? "" : "s"}: {queuedPendingRequestCount} queued, {needsReviewRequestCount} in review, and {activeRequestCount} active. + {requestCount} saved request{requestCount === 1 ? "" : "s"}: {queuedPendingRequestCount} queued, {needsReviewRequestCount} in review, {activeRequestCount} active, and {implementedRequestCount} implemented.
@@ -1233,8 +1154,9 @@ function WorldshaperLauncher() { - {requestTags.map((tag) => ( - + + {requestTagFilterOptions.map(({ tag, count }) => ( + ))} @@ -1292,6 +1214,7 @@ function WorldshaperLauncher() { {needsReviewRequestCount} review {pendingRequestCount} pending {activeRequestCount} active + {implementedRequestCount} implemented
@@ -1316,476 +1239,457 @@ function WorldshaperLauncher() { {adminPasswordError ?

{adminPasswordError}

: null} {logsError ?

{logsError}

: null}
-
-
-

Request Management

-
Select a request to review or edit it.
-
-
- {requests.map((requestEntry) => { - const isMutating = requestMutatingId === requestEntry.id; - const analysisState = formatAnalysisStateLabel(requestEntry.analysis?.state); - const reviewItem = getPrimaryAnalysisItem(requestEntry); - const isSelected = requestEntry.id === selectedAdminRequestId; - return ( -
handleSelectAdminRequest(requestEntry.id)} - > -
-
{requestEntry.title}
-
- {formatRequestStatusLabel(requestEntry.status)} - {requestEntry.category} - {analysisState} - {formatConfidence(reviewItem?.confidence ?? requestEntry.analysis?.confidence)} - {formatRequestTimestamp(requestEntry.updatedAt)} -
- {reviewItem?.reviewRationale ? ( -
{reviewItem.reviewRationale}
- ) : null} - {!reviewItem?.reviewRationale && requestEntry.analysis?.routing?.summary ? ( -
{requestEntry.analysis.routing.summary}
- ) : null} -
- -
- ); - })} -
-
-
-
-

Review Editor

-
Edit request fields, review details, and approval state.
-
- {!adminEditorDraft ? ( -
Select a request from the list to review it.
- ) : ( -
-
- - -
-