gsd-pi 2.57.0 → 2.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/resources/extensions/gsd/auto/infra-errors.js +4 -0
  2. package/dist/resources/extensions/gsd/auto-dispatch.js +3 -3
  3. package/dist/resources/extensions/gsd/auto-worktree.js +7 -2
  4. package/dist/resources/extensions/gsd/auto.js +4 -0
  5. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -1
  6. package/dist/resources/extensions/gsd/dispatch-guard.js +11 -1
  7. package/dist/resources/extensions/gsd/gsd-db.js +8 -1
  8. package/dist/resources/extensions/gsd/parallel-orchestrator.js +23 -6
  9. package/dist/resources/extensions/gsd/preferences.js +29 -15
  10. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  11. package/dist/resources/extensions/gsd/tools/validate-milestone.js +4 -0
  12. package/dist/web/standalone/.next/BUILD_ID +1 -1
  13. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  14. package/dist/web/standalone/.next/build-manifest.json +3 -3
  15. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  16. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  17. package/dist/web/standalone/.next/required-server-files.json +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  19. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  22. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  30. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  35. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  36. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  37. package/dist/web/standalone/.next/server/app/index.html +1 -1
  38. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  45. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  46. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  47. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  48. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  49. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  50. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  51. package/dist/web/standalone/.next/static/chunks/{webpack-4332cbd5dd1be584.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  52. package/dist/web/standalone/server.js +1 -1
  53. package/package.json +1 -1
  54. package/packages/daemon/src/cli.ts +49 -0
  55. package/packages/daemon/src/daemon.test.ts +104 -1
  56. package/packages/daemon/src/daemon.ts +23 -0
  57. package/packages/daemon/src/discord-bot.ts +62 -3
  58. package/packages/daemon/src/index.ts +9 -0
  59. package/packages/daemon/src/launchd.test.ts +356 -0
  60. package/packages/daemon/src/launchd.ts +242 -0
  61. package/packages/pi-coding-agent/package.json +1 -1
  62. package/pkg/package.json +1 -1
  63. package/src/resources/extensions/gsd/auto/infra-errors.ts +3 -0
  64. package/src/resources/extensions/gsd/auto-dispatch.ts +3 -3
  65. package/src/resources/extensions/gsd/auto-worktree.ts +7 -2
  66. package/src/resources/extensions/gsd/auto.ts +5 -0
  67. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -1
  68. package/src/resources/extensions/gsd/dispatch-guard.ts +12 -1
  69. package/src/resources/extensions/gsd/gsd-db.ts +6 -1
  70. package/src/resources/extensions/gsd/parallel-orchestrator.ts +23 -6
  71. package/src/resources/extensions/gsd/preferences.ts +32 -14
  72. package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
  73. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +18 -0
  74. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +47 -0
  75. package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +9 -8
  76. package/src/resources/extensions/gsd/tests/preferences.test.ts +34 -0
  77. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +7 -0
  78. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +23 -1
  79. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +44 -2
  80. package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +175 -0
  81. package/src/resources/extensions/gsd/tools/validate-milestone.ts +5 -0
  82. package/dist/web/standalone/.next/static/chunks/6502.2305d0afd2385711.js +0 -9
  83. /package/dist/web/standalone/.next/static/{yowc5qPtuKxjOr22KmOAy → IoheXIe-5DH7ieX8AUo8U}/_buildManifest.js +0 -0
  84. /package/dist/web/standalone/.next/static/{yowc5qPtuKxjOr22KmOAy → IoheXIe-5DH7ieX8AUo8U}/_ssgManifest.js +0 -0
@@ -41,5 +41,9 @@ export function isInfrastructureError(err) {
41
41
  if (msg.includes(code))
42
42
  return code;
43
43
  }
44
+ // SQLite WAL corruption is not transient — retrying burns LLM budget
45
+ // for guaranteed failures (#2823).
46
+ if (msg.includes("database disk image is malformed"))
47
+ return "SQLITE_CORRUPT";
44
48
  return null;
45
49
  }
@@ -531,11 +531,11 @@ export const DISPATCH_RULES = [
531
531
  if (validationPath) {
532
532
  const validationContent = await loadFile(validationPath);
533
533
  if (validationContent) {
534
- // Accept either the structured template format (table with MET/N/A)
534
+ // Accept either the structured template format (table with MET/N/A/SATISFIED)
535
535
  // or prose evidence patterns the validation agent may emit.
536
536
  const structuredMatch = validationContent.includes("Operational") &&
537
- (validationContent.includes("MET") || validationContent.includes("N/A"));
538
- const proseMatch = /[Oo]perational[\s:][^\n]*(?:pass|verified|confirmed|met|complete|true|yes|addressed|covered|n\/a|not\s+applicable)/i.test(validationContent);
537
+ (validationContent.includes("MET") || validationContent.includes("N/A") || validationContent.includes("SATISFIED"));
538
+ const proseMatch = /[Oo]perational[\s\S]{0,500}?(?:✅|pass|verified|confirmed|met|complete|true|yes|addressed|covered|satisfied|partially|n\/a|not[\s-]+applicable)/i.test(validationContent);
539
539
  const hasOperationalCheck = structuredMatch || proseMatch;
540
540
  if (!hasOperationalCheck) {
541
541
  return {
@@ -1060,12 +1060,17 @@ export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapCont
1060
1060
  const milestoneBranch = autoWorktreeBranch(milestoneId);
1061
1061
  // 1. Auto-commit dirty state in worktree before leaving
1062
1062
  autoCommitDirtyState(worktreeCwd);
1063
- // Reconcile worktree DB into main DB before leaving worktree context
1063
+ // Reconcile worktree DB into main DB before leaving worktree context.
1064
+ // Skip when both paths resolve to the same physical file (shared WAL /
1065
+ // symlink layout) — ATTACHing a WAL-mode file to itself corrupts the
1066
+ // database (#2823).
1064
1067
  if (isDbAvailable()) {
1065
1068
  try {
1066
1069
  const worktreeDbPath = join(worktreeCwd, ".gsd", "gsd.db");
1067
1070
  const mainDbPath = join(originalBasePath_, ".gsd", "gsd.db");
1068
- reconcileWorktreeDb(mainDbPath, worktreeDbPath);
1071
+ if (!isSamePath(worktreeDbPath, mainDbPath)) {
1072
+ reconcileWorktreeDb(mainDbPath, worktreeDbPath);
1073
+ }
1069
1074
  }
1070
1075
  catch {
1071
1076
  /* non-fatal */
@@ -774,6 +774,10 @@ function buildLoopDeps() {
774
774
  };
775
775
  }
776
776
  export async function startAuto(ctx, pi, base, verboseMode, options) {
777
+ if (s.active) {
778
+ debugLog("startAuto", { phase: "already-active", skipping: true });
779
+ return;
780
+ }
777
781
  const requestedStepMode = options?.step ?? false;
778
782
  // Escape stale worktree cwd from a previous milestone (#608).
779
783
  base = escapeStaleWorktree(base);
@@ -872,7 +872,7 @@ export function registerDbTools(pi) {
872
872
  promptSnippet: "Validate a GSD milestone (DB write + VALIDATION.md render)",
873
873
  promptGuidelines: [
874
874
  "Use gsd_validate_milestone when all slices are done and the milestone needs validation before completion.",
875
- "Parameters: milestoneId, verdict, remediationRound, successCriteriaChecklist, sliceDeliveryAudit, crossSliceIntegration, requirementCoverage, verdictRationale, remediationPlan (optional).",
875
+ "Parameters: milestoneId, verdict, remediationRound, successCriteriaChecklist, sliceDeliveryAudit, crossSliceIntegration, requirementCoverage, verificationClasses (optional), verdictRationale, remediationPlan (optional).",
876
876
  "If verdict is 'needs-remediation', also provide remediationPlan and use gsd_reassess_roadmap to add remediation slices to the roadmap.",
877
877
  "On success, returns validationPath where VALIDATION.md was written.",
878
878
  ],
@@ -884,6 +884,7 @@ export function registerDbTools(pi) {
884
884
  sliceDeliveryAudit: Type.String({ description: "Markdown table auditing each slice's claimed vs delivered output" }),
885
885
  crossSliceIntegration: Type.String({ description: "Markdown describing any cross-slice boundary mismatches" }),
886
886
  requirementCoverage: Type.String({ description: "Markdown describing any unaddressed requirements" }),
887
+ verificationClasses: Type.Optional(Type.String({ description: "Markdown describing verification class compliance and gaps" })),
887
888
  verdictRationale: Type.String({ description: "Why this verdict was chosen" }),
888
889
  remediationPlan: Type.Optional(Type.String({ description: "Remediation plan (required if verdict is needs-remediation)" })),
889
890
  }),
@@ -18,9 +18,19 @@ export function getPriorSliceCompletionBlocker(base, _mainBranch, unitType, unit
18
18
  const { milestone: targetMid, slice: targetSid } = parseUnitId(unitId);
19
19
  if (!targetMid || !targetSid)
20
20
  return null;
21
+ // Parallel worker isolation: when GSD_MILESTONE_LOCK is set, this worker
22
+ // is scoped to a single milestone. Skip the cross-milestone dependency
23
+ // check — other milestones are being handled by their own workers.
24
+ // Without this, the dispatch guard sees incomplete slices in M010/M011
25
+ // (cloned into the worktree DB) and blocks M012 from ever starting. #2797
26
+ const milestoneLock = process.env.GSD_MILESTONE_LOCK;
21
27
  // Use findMilestoneIds to respect custom queue order.
22
28
  // Only check milestones that come BEFORE the target in queue order.
23
- const allIds = findMilestoneIds(base);
29
+ // When locked to a specific milestone, only check that milestone's
30
+ // intra-slice dependencies — skip all cross-milestone checks.
31
+ const allIds = milestoneLock && targetMid === milestoneLock
32
+ ? [targetMid]
33
+ : findMilestoneIds(base);
24
34
  const targetIdx = allIds.indexOf(targetMid);
25
35
  if (targetIdx < 0)
26
36
  return null;
@@ -5,7 +5,7 @@
5
5
  // Exposes a unified sync API for decisions and requirements storage.
6
6
  // Schema is initialized on first open with WAL mode for file-backed DBs.
7
7
  import { createRequire } from "node:module";
8
- import { existsSync, copyFileSync, mkdirSync } from "node:fs";
8
+ import { existsSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
9
9
  import { dirname } from "node:path";
10
10
  import { GSDError, GSD_STALE_STATE } from "./errors.js";
11
11
  const _require = createRequire(import.meta.url);
@@ -1455,6 +1455,13 @@ export function reconcileWorktreeDb(mainDbPath, worktreeDbPath) {
1455
1455
  const zero = { decisions: 0, requirements: 0, artifacts: 0, milestones: 0, slices: 0, tasks: 0, memories: 0, verification_evidence: 0, conflicts: [] };
1456
1456
  if (!existsSync(worktreeDbPath))
1457
1457
  return zero;
1458
+ // Guard: bail when both paths resolve to the same physical file.
1459
+ // ATTACHing a WAL-mode DB to itself corrupts the WAL (#2823).
1460
+ try {
1461
+ if (realpathSync(mainDbPath) === realpathSync(worktreeDbPath))
1462
+ return zero;
1463
+ }
1464
+ catch { /* path resolution failed — fall through to existing checks */ }
1458
1465
  // Sanitize path: reject any characters that could break ATTACH syntax.
1459
1466
  // ATTACH DATABASE doesn't support parameterized paths in all providers,
1460
1467
  // so we use strict allowlist validation instead.
@@ -406,8 +406,19 @@ function createMilestoneWorktree(basePath, milestoneId) {
406
406
  // ─── Worker Spawning ───────────────────────────────────────────────────
407
407
  /**
408
408
  * Spawn a worker process for a milestone.
409
- * The worker runs `gsd --print "/gsd auto"` in the milestone's worktree
409
+ * The worker runs `gsd headless --json auto` in the milestone's worktree
410
410
  * with GSD_MILESTONE_LOCK set to isolate state derivation.
411
+ *
412
+ * IMPORTANT: We use `headless --json auto` instead of `--print "/gsd auto"`.
413
+ * --print mode calls session.prompt() which returns immediately after the
414
+ * extension command handler fires, because auto-mode's ctx.newSession()
415
+ * resets the session and unblocks the outer prompt() await. This causes
416
+ * process.exit(0) to fire before any LLM work happens. See #2792.
417
+ *
418
+ * The headless subcommand uses an RPC client that keeps the process alive
419
+ * until auto-mode emits a terminal notification or the idle timer fires.
420
+ * It outputs NDJSON events to stdout (with --json), which our
421
+ * processWorkerLine() parser already understands.
411
422
  */
412
423
  export function spawnWorker(basePath, milestoneId) {
413
424
  if (!state)
@@ -423,7 +434,7 @@ export function spawnWorker(basePath, milestoneId) {
423
434
  return false;
424
435
  let child;
425
436
  try {
426
- child = spawn(process.execPath, [binPath, "--mode", "json", "--print", "/gsd auto"], {
437
+ child = spawn(process.execPath, [binPath, "headless", "--json", "auto"], {
427
438
  cwd: worker.worktreePath,
428
439
  env: {
429
440
  ...process.env,
@@ -461,9 +472,10 @@ export function spawnWorker(basePath, milestoneId) {
461
472
  return false;
462
473
  }
463
474
  // ── NDJSON stdout monitoring ────────────────────────────────────────
464
- // Workers run with --mode json, emitting one JSON event per line.
465
- // We parse message_end events to extract cost/token usage, keeping
466
- // the coordinator's cost tracking in sync with actual API spend.
475
+ // Workers run via `headless --json`, which forwards all RPC events
476
+ // as NDJSON to stdout. We parse message_end events to extract
477
+ // cost/token usage, keeping the coordinator's cost tracking in sync
478
+ // with actual API spend.
467
479
  if (child.stdout) {
468
480
  let stdoutBuffer = "";
469
481
  child.stdout.on("data", (data) => {
@@ -674,7 +686,12 @@ export async function stopParallel(basePath, milestoneId) {
674
686
  }
675
687
  catch { /* process may already be dead */ }
676
688
  }
677
- const exitedAfterTerm = await waitForWorkerExit(worker, 750);
689
+ // Wait for the headless process to cascade SIGTERM to its RPC child.
690
+ // The headless signal handler calls client.stop() which sends SIGTERM
691
+ // to the RPC child and waits up to 1000ms. The previous 750ms window
692
+ // was insufficient — the parent got SIGKILL before the child died,
693
+ // leaving orphaned RPC processes holding auto.lock. See #2798.
694
+ const exitedAfterTerm = await waitForWorkerExit(worker, 3000);
678
695
  if (!exitedAfterTerm && worker.pid > 0) {
679
696
  try {
680
697
  if (worker.process) {
@@ -16,7 +16,7 @@ import { gsdRoot } from "./paths.js";
16
16
  import { parse as parseYaml } from "yaml";
17
17
  import { normalizeStringArray } from "../shared/format-utils.js";
18
18
  import { resolveProfileDefaults as _resolveProfileDefaults } from "./preferences-models.js";
19
- import { MODE_DEFAULTS, } from "./preferences-types.js";
19
+ import { KNOWN_PREFERENCE_KEYS, MODE_DEFAULTS, } from "./preferences-types.js";
20
20
  import { validatePreferences } from "./preferences-validation.js";
21
21
  import { formatSkillRef } from "./preferences-skills.js";
22
22
  // ─── Re-exports: validation ─────────────────────────────────────────────────
@@ -183,28 +183,42 @@ function parseHeadingListFormat(content) {
183
183
  const headingMatch = line.match(/^##\s+(.+)$/);
184
184
  if (headingMatch) {
185
185
  currentSection = headingMatch[1].trim().toLowerCase().replace(/\s+/g, '_');
186
+ if (!result[currentSection])
187
+ result[currentSection] = [];
186
188
  continue;
187
189
  }
188
- if (currentSection) {
189
- const itemMatch = line.match(/^-\s+([^:]+):\s*(.*)$/);
190
- if (itemMatch) {
191
- if (!result[currentSection])
192
- result[currentSection] = {};
193
- const value = itemMatch[2].trim();
194
- // Coerce "true"/"false" strings and numbers
195
- result[currentSection][itemMatch[1].trim()] = value;
196
- }
190
+ if (currentSection && line.trim() && !line.trimStart().startsWith('#')) {
191
+ result[currentSection].push(line);
197
192
  }
198
193
  }
199
- // Convert string values to appropriate types via YAML parser for each section
200
194
  const typed = {};
201
- for (const [section, entries] of Object.entries(result)) {
202
- const yamlLines = Object.entries(entries).map(([k, v]) => `${k}: ${v}`).join('\n');
195
+ for (const [section, lines] of Object.entries(result)) {
196
+ if (lines.length === 0)
197
+ continue;
198
+ const usesLegacyListItems = lines.every((line) => /^\s*-\s+[^:]+:\s*.*$/.test(line));
199
+ const yamlBlock = usesLegacyListItems
200
+ ? lines.map((line) => line.replace(/^\s*-\s+/, '')).join('\n')
201
+ : lines.join('\n');
203
202
  try {
204
- typed[section] = parseYaml(yamlLines);
203
+ const parsed = parseYaml(yamlBlock);
204
+ if (typeof parsed !== 'object' || parsed === null)
205
+ continue;
206
+ let targetSection = section;
207
+ let value = parsed;
208
+ if (!Array.isArray(parsed)) {
209
+ const keys = Object.keys(parsed);
210
+ if (keys.length === 1) {
211
+ const [onlyKey] = keys;
212
+ if (onlyKey === section || (!KNOWN_PREFERENCE_KEYS.has(section) && KNOWN_PREFERENCE_KEYS.has(onlyKey))) {
213
+ targetSection = onlyKey;
214
+ value = parsed[onlyKey];
215
+ }
216
+ }
217
+ }
218
+ typed[targetSection] = value;
205
219
  }
206
220
  catch {
207
- typed[section] = entries;
221
+ /* malformed section skip */
208
222
  }
209
223
  }
210
224
  return typed;
@@ -26,7 +26,7 @@ All relevant context has been preloaded below — the roadmap, all slice summari
26
26
  4. Check **requirement coverage** — are all active requirements addressed by at least one slice?
27
27
  5. If **Verification Classes** are provided in the inlined context above, check each non-empty class:
28
28
  - For each verification class (Contract, Integration, Operational, UAT), determine whether slice summaries, UAT results, or observable behavior provide evidence that this verification tier was addressed.
29
- - Document the compliance status of each class in your verdict rationale.
29
+ - Document the compliance status of each class in a dedicated verification classes section.
30
30
  - If `Operational` verification is non-empty and no evidence of operational verification exists, flag this explicitly — it means planned operational checks (migrations, deployments, runtime verification) were not proven.
31
31
  - A milestone with unaddressed verification classes may still pass if the gaps are minor, but the gaps MUST be documented in the Deferred Work Inventory.
32
32
  6. Determine a verdict:
@@ -36,7 +36,7 @@ All relevant context has been preloaded below — the roadmap, all slice summari
36
36
 
37
37
  ## Persist Validation
38
38
 
39
- **Persist validation results through `gsd_validate_milestone`.** Call it with: `milestoneId`, `verdict`, `remediationRound`, `successCriteriaChecklist`, `sliceDeliveryAudit`, `crossSliceIntegration`, `requirementCoverage`, `verdictRationale`, and `remediationPlan` (if verdict is `needs-remediation`). The tool writes the validation to the DB and renders VALIDATION.md to disk.
39
+ **Persist validation results through `gsd_validate_milestone`.** Call it with: `milestoneId`, `verdict`, `remediationRound`, `successCriteriaChecklist`, `sliceDeliveryAudit`, `crossSliceIntegration`, `requirementCoverage`, `verificationClasses` (when non-empty), `verdictRationale`, and `remediationPlan` (if verdict is `needs-remediation`). The tool writes the validation to the DB and renders VALIDATION.md to disk.
40
40
 
41
41
  If verdict is `needs-remediation`:
42
42
  - After calling `gsd_validate_milestone`, use `gsd_reassess_roadmap` to add remediation slices. Pass `milestoneId`, a synthetic `completedSliceId` (e.g. "VALIDATION"), `verdict: "roadmap-adjusted"`, `assessment` text, and `sliceChanges` with the new slices in the `added` array. The tool persists the changes to the DB and re-renders ROADMAP.md.
@@ -30,6 +30,10 @@ ${params.crossSliceIntegration}
30
30
  ## Requirement Coverage
31
31
  ${params.requirementCoverage}
32
32
 
33
+ ${params.verificationClasses ? `## Verification Class Compliance
34
+ ${params.verificationClasses}
35
+
36
+ ` : ""}
33
37
  ## Verdict Rationale
34
38
  ${params.verdictRationale}
35
39
  `;
@@ -1 +1 @@
1
- yowc5qPtuKxjOr22KmOAy
1
+ IoheXIe-5DH7ieX8AUo8U
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
3
  "/_global-error/page": "/_global-error",
4
- "/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
5
- "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
6
4
  "/api/boot/route": "/api/boot",
5
+ "/api/bridge-terminal/input/route": "/api/bridge-terminal/input",
6
+ "/api/bridge-terminal/resize/route": "/api/bridge-terminal/resize",
7
7
  "/api/bridge-terminal/stream/route": "/api/bridge-terminal/stream",
8
- "/api/cleanup/route": "/api/cleanup",
9
8
  "/api/dev-mode/route": "/api/dev-mode",
10
- "/api/doctor/route": "/api/doctor",
9
+ "/api/cleanup/route": "/api/cleanup",
11
10
  "/api/captures/route": "/api/captures",
11
+ "/api/doctor/route": "/api/doctor",
12
12
  "/api/export-data/route": "/api/export-data",
13
13
  "/api/browse-directories/route": "/api/browse-directories",
14
14
  "/api/forensics/route": "/api/forensics",
15
- "/api/git/route": "/api/git",
16
15
  "/api/history/route": "/api/history",
16
+ "/api/git/route": "/api/git",
17
17
  "/api/hooks/route": "/api/hooks",
18
- "/api/inspect/route": "/api/inspect",
19
18
  "/api/knowledge/route": "/api/knowledge",
19
+ "/api/inspect/route": "/api/inspect",
20
20
  "/api/experimental/route": "/api/experimental",
21
21
  "/api/live-state/route": "/api/live-state",
22
22
  "/api/preferences/route": "/api/preferences",
@@ -26,18 +26,18 @@
26
26
  "/api/session/browser/route": "/api/session/browser",
27
27
  "/api/session/command/route": "/api/session/command",
28
28
  "/api/session/events/route": "/api/session/events",
29
+ "/api/session/manage/route": "/api/session/manage",
29
30
  "/api/settings-data/route": "/api/settings-data",
30
31
  "/api/shutdown/route": "/api/shutdown",
31
- "/api/session/manage/route": "/api/session/manage",
32
32
  "/api/skill-health/route": "/api/skill-health",
33
33
  "/api/steer/route": "/api/steer",
34
34
  "/api/terminal/input/route": "/api/terminal/input",
35
- "/api/files/route": "/api/files",
36
35
  "/api/terminal/resize/route": "/api/terminal/resize",
36
+ "/api/files/route": "/api/files",
37
37
  "/api/switch-root/route": "/api/switch-root",
38
38
  "/api/terminal/sessions/route": "/api/terminal/sessions",
39
- "/api/terminal/stream/route": "/api/terminal/stream",
40
39
  "/api/terminal/upload/route": "/api/terminal/upload",
40
+ "/api/terminal/stream/route": "/api/terminal/stream",
41
41
  "/api/undo/route": "/api/undo",
42
42
  "/api/visualizer/route": "/api/visualizer",
43
43
  "/api/update/route": "/api/update",
@@ -4,11 +4,11 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/yowc5qPtuKxjOr22KmOAy/_buildManifest.js",
8
- "static/yowc5qPtuKxjOr22KmOAy/_ssgManifest.js"
7
+ "static/IoheXIe-5DH7ieX8AUo8U/_buildManifest.js",
8
+ "static/IoheXIe-5DH7ieX8AUo8U/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
- "static/chunks/webpack-4332cbd5dd1be584.js",
11
+ "static/chunks/webpack-61d3afac6d0f0ce7.js",
12
12
  "static/chunks/4bd1b696-e5d7c65570c947b7.js",
13
13
  "static/chunks/3794-337d1ca25ad99a89.js",
14
14
  "static/chunks/main-app-d3d4c336195465f9.js"
@@ -78,8 +78,8 @@
78
78
  "dynamicRoutes": {},
79
79
  "notFoundRoutes": [],
80
80
  "preview": {
81
- "previewModeId": "171f26cb8e3ff7280d2a38996d701a66",
82
- "previewModeSigningKey": "ad3f3fc59eff2c30c23e41b7554ff0cba01d0561174ecc27090b6250be89d8f6",
83
- "previewModeEncryptionKey": "88ce67fd9908c708c614a8b4b75b78d016f0c0e9ed29c2d35cbc4c92d3c2f609"
81
+ "previewModeId": "cfd305d0ba0974dc452e5957b205f5aa",
82
+ "previewModeSigningKey": "9e421b86649471d70168737defec8a7ff046164716d15e496e41c9f5f2b7ae02",
83
+ "previewModeEncryptionKey": "35460424da4dbaa1c9ca1fe6cc28113bdae7dcd85c6a9930e824e9cb4d80a926"
84
84
  }
85
85
  }
@@ -6,7 +6,7 @@
6
6
  "static/chunks/363642f4.f9053a63f1b97508.js",
7
7
  "static/chunks/4986-c2fc8845ce785303.js",
8
8
  "static/chunks/2008.817d0885545aaea9.js",
9
- "static/chunks/6502.2305d0afd2385711.js"
9
+ "static/chunks/6502.8b732f67a11b11b4.js"
10
10
  ]
11
11
  },
12
12
  "components/gsd/chat-mode.tsx -> react-markdown": {
@@ -157,7 +157,7 @@
157
157
  "proxyPrefetch": "flexible",
158
158
  "optimisticClientCache": true,
159
159
  "manualClientBasePath": false,
160
- "cpus": 5,
160
+ "cpus": 9,
161
161
  "memoryBasedWorkersCount": false,
162
162
  "imgOptConcurrency": null,
163
163
  "imgOptTimeoutInSeconds": 7,
@@ -1,2 +1,2 @@
1
- <!DOCTYPE html><!--yowc5qPtuKxjOr22KmOAy--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4332cbd5dd1be584.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
- @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-4332cbd5dd1be584.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"yowc5qPtuKxjOr22KmOAy\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><!--IoheXIe_5DH7ieX8AUo8U--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-61d3afac6d0f0ce7.js"/><script src="/_next/static/chunks/4bd1b696-e5d7c65570c947b7.js" async=""></script><script src="/_next/static/chunks/3794-337d1ca25ad99a89.js" async=""></script><script src="/_next/static/chunks/main-app-d3d4c336195465f9.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: Internal Server Error.</title><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
2
+ @media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-61d3afac6d0f0ce7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[57121,[],\"\"]\n3:I[74581,[],\"\"]\n4:I[90484,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[90484,[],\"ViewportBoundary\"]\n9:I[90484,[],\"MetadataBoundary\"]\nb:I[27123,[],\"\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"IoheXIe-5DH7ieX8AUo8U\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{}]}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",[]],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
@@ -6,7 +6,7 @@
6
6
  7:I[90484,[],"ViewportBoundary"]
7
7
  9:I[90484,[],"MetadataBoundary"]
8
8
  b:I[27123,[],""]
9
- 0:{"P":null,"b":"yowc5qPtuKxjOr22KmOAy","c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
9
+ 0:{"P":null,"b":"IoheXIe-5DH7ieX8AUo8U","c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
10
10
  8:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
11
11
  6:null
12
12
  a:[]
@@ -6,7 +6,7 @@
6
6
  7:I[90484,[],"ViewportBoundary"]
7
7
  9:I[90484,[],"MetadataBoundary"]
8
8
  b:I[27123,[],""]
9
- 0:{"P":null,"b":"yowc5qPtuKxjOr22KmOAy","c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
9
+ 0:{"P":null,"b":"IoheXIe-5DH7ieX8AUo8U","c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["_global-error",{"children":["__PAGE__",{}]}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$L7",null,{"children":"$L8"}],["$","div",null,{"hidden":true,"children":["$","$L9",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$La"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$b",[]],"S":true}
10
10
  8:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
11
11
  6:null
12
12
  a:[]
@@ -1,5 +1,5 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[90484,[],"OutletBoundary"]
3
3
  3:"$Sreact.suspense"
4
- 0:{"buildId":"yowc5qPtuKxjOr22KmOAy","rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"loading":null,"isPartial":false}
4
+ 0:{"buildId":"IoheXIe-5DH7ieX8AUo8U","rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":["$","title",null,{"children":"500: Internal Server Error."}]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"lineHeight":"48px"},"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","paddingRight":23,"fontSize":24,"fontWeight":500,"verticalAlign":"top"},"children":"500"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"28px"},"children":"Internal Server Error."}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"loading":null,"isPartial":false}
5
5
  4:null
@@ -1,4 +1,4 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[57121,[],""]
3
3
  3:I[74581,[],""]
4
- 0:{"buildId":"yowc5qPtuKxjOr22KmOAy","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
4
+ 0:{"buildId":"IoheXIe-5DH7ieX8AUo8U","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
@@ -2,4 +2,4 @@
2
2
  2:I[90484,[],"ViewportBoundary"]
3
3
  3:I[90484,[],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
- 0:{"buildId":"yowc5qPtuKxjOr22KmOAy","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
5
+ 0:{"buildId":"IoheXIe-5DH7ieX8AUo8U","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
@@ -1,4 +1,4 @@
1
1
  1:"$Sreact.fragment"
2
2
  2:I[57121,[],""]
3
3
  3:I[74581,[],""]
4
- 0:{"buildId":"yowc5qPtuKxjOr22KmOAy","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
4
+ 0:{"buildId":"IoheXIe-5DH7ieX8AUo8U","rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"loading":null,"isPartial":false}
@@ -1 +1 @@
1
- 0:{"buildId":"yowc5qPtuKxjOr22KmOAy","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"_global-error","paramType":null,"paramKey":"_global-error","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":false},"staleTime":300}
1
+ 0:{"buildId":"IoheXIe-5DH7ieX8AUo8U","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"_global-error","paramType":null,"paramKey":"_global-error","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":false}},"isRootLayout":false},"staleTime":300}