disclosure-bureau/web/app/bureau/page.tsx

39 lines
1.6 KiB
TypeScript
Raw Normal View History

W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
/**
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
* /bureau Case file library.
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
*
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
* Reader-facing list of every assembled narrative. No detective surfacing,
* no artefact dumps. Just stories with hooks.
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
*/
import { AuthBar } from "@/components/auth-bar";
W4.1+W4.2: anti-AI-tics house style + bureau nav (back/home everywhere) Two complaints in one wave: (W4.1) User: "Não pode ter vícios de IA como uso excessivo de '-' que a IA coloca geralmente no lugar de vírgulas por exemplo. Isso deve fazer parte do prompt geral." - New prompts/_house-style.md banning the 9 most common AI prose tells in both EN and PT-BR: 1. Em dashes as comma replacements (—) 2. Rule-of-three lists ("concrete, rigorous, and grounded") 3. Conjunctive openers ("Moreover", "Notably", "Ademais") 4. Superficial -ing analyses ("marking a shift", "destacando") 5. Inflated symbolism + AI vocab (tapestry, navigate, delve, underscore, robust, multifaceted, marco histórico, ...) 6. Negative parallelisms ("Not just X but Y") 7. Vague attribution ("Some scholars say...") 8. Summary closers ("In summary...", "Em suma...") 9. Hedging fluff ("It's important to note...") Verbatim chunk quotes are explicitly exempt; preserve as-is. - claude.ts callClaude() lazily loads _house-style.md once per process and PREPENDS it to every detective's system prompt: composedSystem = houseStyle + "---" + detective.systemPrompt This means all 7 detectives + future ones get the rules without any per-prompt change. (W4.2) User: "Quando entra em uma página da investigação não tem como voltar! UX terrível!" - New <BureauNav> sticky topbar with explicit "← home" + "🔎 bureau" buttons + clickable breadcrumb trail. Always visible at the top of every bureau page so the user can escape in one click. - Wired into /bureau, /h/[hypothesisId], /c/[slug], /jobs/[id]. Each page passes its sensible parent crumb (/bureau#hypotheses, /bureau#reports, /bureau#jobs). - Replaces the previous plain-text "disclosure.top / hypothesis / H-0004" line which had no visual affordance. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 16:27:58 +00:00
import { BureauNav } from "@/components/bureau-nav";
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
import { CaseLibrary } from "@/components/case-library";
import { getLocale } from "@/components/locale-toggle";
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
export const runtime = "nodejs";
export const dynamic = "force-dynamic";
export default async function BureauPage() {
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
const locale = (await getLocale()) === "en" ? "en" : "pt-br";
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
return (
<div className="min-h-screen bg-[#0a0e1a] text-[#e7ecf3]">
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
<BureauNav crumbs={[{ label: locale === "en" ? "case files" : "casos" }]} />
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
<AuthBar />
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
<div className="mx-auto max-w-5xl px-4 py-6 pt-4">
<header className="mb-6 border-b border-[rgba(224,192,128,0.32)] pb-4">
<h1 className="font-mono text-3xl text-[#e0c080]">
{locale === "en" ? "▍ The Case Files" : "▍ Os Arquivos do Caso"}
</h1>
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
<p className="text-[#8896aa] text-sm mt-1">
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
{locale === "en"
? "Narratives assembled from the declassified record. Each case is a story — written from primary documents, with citations linked to source pages."
: "Narrativas montadas a partir do registro desclassificado. Cada caso é uma história — escrita a partir de documentos primários, com citações vinculadas às páginas-fonte."}
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
</p>
</header>
W5.1: enthusiast pivot — strip detective surfacing, magazine homepage User explicit: "1 bilhão de entusiastas pelo mundo ovni" — site is for the UFO-curious public, not for skeptics. The 8-detective scaffolding becomes invisible plumbing; the reader sees stories about what was observed. Reader-facing changes: New homepage (web/app/page.tsx) - SiteHeader: magazine-style top nav (no detective tiles) - HeroBanner: full-bleed editorial opener with declassified-page art background, display-serif headline, live stats row (122 docs, 2047 events, 1861 witnesses, 867 craft catalogued) - FeaturedCase: cover-story treatment of the most recent case_report, uses a real document page as hero image, links to /c/[slug] - PortalGrid: 6 thematic doorways into the archive — Sightings, Witnesses, Craft, Hot spots, Programs, Documents — each tile shows a real entity count and short editorial blurb - GreatestHits: top 9 most-cited events from the corpus (Kenneth Arnold 1947, Mantell 1948, …) as a magazine grid - Doc list kept but reframed as "the primary record" New sub-pages (5) - /sightings → events (2047), magazine grid - /witnesses → people (1861), compact table - /objects → uap_objects (867), magazine grid - /locations → locations (1757), compact table - /operations → organizations (1596), compact table - /documents → full doc list with thumbnails (mirrors homepage section for direct deep-link) All share <EntityListPage> shell with per-page i18n + JSON-LD ItemList Stripped detective surfacing - /jobs/[id]: "Sherlock Holmes / Dr. Watson" → "Investigation in progress" - chat-bubble: detective-named card → neutral "Investigação em andamento" - quick-launch: 7-kind detective dropdown → single "investigar um caso" input (kind=case_report hardcoded) - /bureau: rewritten as the case-file library (no artefact dumps) Typography + design - Fraunces variable serif loaded for display headings (`.font-display` class) - Gold-amber accent (#e0c080) unified as the brand colour - Asymmetric magazine grids (1+2+3 column, generous whitespace) - Hover micro-interactions (image scale on featured case, translateX on portal arrows) SEO + GEO - layout.tsx metadataBase + title.template + per-route Metadata exports - Organization JSON-LD on root layout - WebSite + SearchAction JSON-LD on homepage - CollectionPage + ItemList JSON-LD on every entity list page - openGraph + twitter cards, pt-BR primary + en-US alternate - ai:purpose meta tag for Generative Engine Optimization — declares the site as a citation-linked primary-source archive - robots: index + follow with large image preview The detectives themselves remain alive in the backend (runtime, DB, audit log), but the reader never sees "Holmes / Sun-Tzu / Watson" in the UI. The next phase will reorient case-writer to write as a single best-seller voice synthesising all the internal sources. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:09:46 +00:00
<CaseLibrary locale={locale} layout="grid" />
W3.9: surface the Investigation Bureau on the homepage + /bureau hub Closes a UX gap the user surfaced: W3.5-3.8 built 8 detectives, 4 new URL endpoints (/jobs/[id], /h/[id], /c/[slug], /api/h/[id]/red-team) and a chat tool, but the homepage was unchanged — the bureau was invisible unless you knew the URL or asked the chat to invoke request_investigation. Homepage (web/app/page.tsx): - Title `▍ war.gov/ufo — Investigative Wiki` → `▍ The Disclosure Bureau` - Subtitle expanded from "Holmes · Poirot · Dupin · Locard" to all 8 detectives (Holmes · Locard · Dupin · Schneier · Poirot · Taleb · Tetlock · Case-Writer) - New `🔎 bureau` topbar link (gold, between graph/stats and batch) - BureauSnapshot inserted right after the header BureauSnapshot (web/components/bureau-snapshot.tsx) — server component: - 8 detective tiles with role labels (each in its tone color) - 6 clickable counters (evidence / hypotheses / contradictions / witnesses / outliers / case reports) — anchor to /bureau#section - 6 "recent artefacts" columns surfacing the last 3-4 of each kind: hypotheses with prior→posterior + band + ↳reviewed_by marker, contradictions with topic + resolution_status, evidence with Grade badge + verbatim quote, outliers with title + scope.kind, witness analyses with canonical_name + credibility + verdict, case reports with slug + link to /c/<slug> - "Recent jobs" strip linking to /jobs/[id] color-coded by status - Reports read from /data/ufo/case/reports/ via fs.readdir + stat, sorted by mtime — no DB round-trip needed for that section /bureau (web/app/bureau/page.tsx) — full hub: - Header with full counts - 7 sections (anchored to homepage counter links): Case reports, Hypotheses, Evidence, Contradictions, Outliers, Witnesses, Recent jobs table — each rendering up to 100 rows - Reports section parses frontmatter from each .md to surface topic + n_hypotheses + n_evidence on the card Runtime fixes batched in: - Poirot: coerce entity_pk via Number() — node-postgres returns BIGINT as string by default; writer's Number.isFinite() rejected it as "person_entity_pk required" (j-edgar-hoover retry path) - Tetlock: write_calibration rationale cap 600 → 1200 chars. Prompt still asks ≤ 600 but a 2× slack beats failing the job on honest analysis. Observed live: Tetlock emitted ~620 chars on H-0003 and the writer rejected the entire calibration. - Case-Writer: Promise.all of 5 queries × max_parallel=2 jobs demanded up to 10 connections against the investigator role's rolconnlimit=4 → "too many connections for role investigator". Sequentialized — the LLM call is the hot path, not these queries. Smoke results visible now on the homepage: - 3 hypotheses (H-0001/2/3) about green fireballs origin - 3 contradictions (R-0001/2/3) about color, geographic confinement, exclusive-green vs multicolored - 2 evidence cards (E-0002/3) Grade B - 3 outliers (G-0001/2/3) — including Taleb's deliberate meteor-shower-camouflage flag - 1 case report at /c/green-fireballs-sandia (Watson 13.4 KB, five-act narrative, fully cited) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 01:41:28 +00:00
</div>
</div>
);
}