Stage 1 Entry Page

The Stage 1 Entry Page renders one complete current public Entry v2 at /entries/{entry-slug}/. It is the maintained-record view behind each Homepage preview, not an article template or a client-side data screen. This page is for maintainers, technical users, and coding agents changing Entry projection, static routing, record presentation, or not-found behavior.

Purpose and Ownership

The Entry Page gives every validated current public Entry one consistent evidence-bounded reading surface. The feature owns:

  • Projection from one ResolvedPublicEntry into display-ready labels, dates, links, Markdown, caution text, metadata, and source records.
  • The exact public section and heading order.
  • Presentation of every Domain, the primary Topic Trail and its resolved description, all secondary Topic Trails, and adjacent Entry links.
  • The Entry v2 reading sequence: Summary, Reality Check, Context and assessment rationales, Takeaway, thread relationships, sources, provenance, and neighbors.
  • The responsive Entry record, source-record layout, focus behavior, and overflow protection.
  • Static generation of one canonical route for every current public Entry v2.
  • The generic static not-found page used when a route was not generated.

It does not own:

  • Canonical Entry validation, Source Role definitions, or public label maps.
  • Snapshot publication, materiality, Date Added, Date Updated, or current-revision selection.
  • Public source ordering. Release Construction supplies an already ordered copied Entry.
  • Topic Trail destination-page membership, ordering, and presentation. The Stage 1 Topic Trail Page owns that feature.
  • The shared Header, Footer, document structure, or Frontier Atlas tokens.
  • Client-side fetching, loading states, browser recovery, telemetry, or logging.

Inputs and Outputs

The feature accepts one complete ResolvedPublicEntry from the application release boundary. That value contains the selected current snapshot, derived activity dates, canonical Entry URL, resolved Topic Trails, resolved Methodology, and sources in public display order.

createEntryPageViewModel returns presentation-only values. It maps controlled values to public labels, formats calendar dates for display while preserving exact ISO values, renders the v2 Reality Check, Context, and Takeaway through the Entry Markdown APIs, validates canonical relationship and source URLs, and projects adjacent Entries into same-site navigation links. Internal links use same-site paths derived from absolute canonical URLs. The projection does not change the resolved Entry.

EntryPage.astro renders the view model as static semantic HTML. The route passes that component through FoundationLayout.astro, so every generated Entry has the shared skip link, Header, Main region, and Footer.

Static Route Flow

  1. src/pages/entries/[slug].astro selects the named application release adapter.
  2. Development and test builds use fixed non-production metadata. Production uses the persisted genuine release descriptor and fails closed when that descriptor is missing or invalid.
  3. getStaticPaths() reads release.current_entries, orders a copy with the shared latest-material-activity comparator, and creates one route and resolved Entry prop for each slug.
  4. The thin route passes the resolved Entry to the Entry Page feature. It does not read canonical files, choose a snapshot, sort sources, or fetch data in the browser.
  5. The feature projects and renders the complete record into HTML during the build.
  6. Slugs absent from getStaticPaths() fall through to the generated 404.html. Built-site preview and Cloudflare Pages return an HTTP 404 without redirecting to the Homepage.

Every current genuine Entry produces one Entry route. Removed Entries do not produce routes.

Record Structure

The rendered record has one H1 and uses this H2 order:

  1. The Reality Check.
  2. Context.
  3. The Takeaway.
  4. Continue the Thread.
  5. Sources.

The header precedes those sections and contains Back to Feed, Date Updated, every Domain, the Entry title, and the v2 Summary. Context places the researched body beside an assessment block containing Claim Status and Evidence Strength with their Entry-specific rationales. Continue the Thread shows the resolved primary Topic Trail name and description, then any secondary trails. Sources ends with Last Checked, the exact Methodology version link, and Previous/Next Entry neighbors when available. Previous moves backward in time to an older Entry, while Next moves forward in time to a newer Entry.

The page remains static and fully open: no tabs, accordions, or client-side loading hide the v2 record. The connector and asterisk accents are decorative; authored text and accessible labels carry the meaning.

Assessment and Conditional Content

The Context assessment always presents Claim Status and Evidence Strength with their Entry-specific rationales. The page does not render the legacy v1 Review Status, Review Reason, Entry State, Frontier Delta, Significance, or Caveats fields. Those v1 fields remain readable only in the historical canonical and snapshot contracts.

Reality Check appears before Context so the most important immediate qualification is visible before the longer explanation. The Takeaway follows Context and states the considered conclusion without turning either assessment into a score, percentage, progress bar, or confidence measure.

Markdown and Escaping

The Entry Page uses Entry-specific Markdown APIs over the shared canonical Markdown renderer. The inline profile is used for the Reality Check. The block profile supports Context and Takeaway with paragraphs, inline formatting, safe links, lists, blockquotes, tables, and code blocks.

Text, URLs, titles, and code are escaped before HTML is emitted. Links allow only HTTP, HTTPS, mailto, or relative destinations. Images, raw HTML, headings inside authored fields, unsafe protocols, unresolved references, and other unsupported nodes fail the build instead of producing partial or unsafe markup.

The feature styles tables, code, and long URLs so authored content cannot force horizontal page scrolling.

Source Presentation

Release resolution clones the selected current Entry and orders its copied source array through the domain-owned public comparator. The Entry Page maps that array in place and never sorts it locally.

Every source record keeps its citation ID, title, publisher or domain, public Source Role, Evidence Types, used_for text, and URL attached to the same source object. The page gives every repeated source link a contextual accessible name based on the source title.

Dataset Generation defensively uses the same ordering helper. This shared contract prevents the HTML record and public dataset from disagreeing about evidence-role order while leaving canonical records and immutable snapshots untouched.

Failure Behavior

Incomplete or invalid public Entries are blocked during validation or release construction. The Entry Page does not repair them, insert placeholder fields, or render a partial public record.

Projection throws a build error when it receives an invalid resolved relationship or source URL, unsafe or unsupported Markdown, or a controlled value without an approved public mapping. Existing build diagnostics and tests report the failure; the browser receives no recovery script.

Unknown slugs are not represented as incomplete Entries. They receive the generic static not-found page with one H1, neutral wording, the shared Header and Footer, and a normal Homepage link.

The Methodology provenance link resolves to the exact immutable version route used by the snapshot, while Topic Trail links resolve to generated static Topic Trail pages. Release construction, not the Entry Page, owns the requirement that every production relationship and route resolve before publication.

The document head keeps the absolute self-canonical URL. Topic Trail and Methodology anchors use only the route path and fragment, so local development remains on the local origin. Source links remain absolute external URLs and are not converted.

Internal Edge Cases

  • Every associated Domain is displayed with equal weight; the full page never silently selects only the first Domain.
  • The Methodology provenance link uses the resolved version-specific URL. The Entry Page does not hardcode a Methodology version or substitute the current route.
  • Same-site projection preserves Methodology fragments and Topic Trail paths without carrying the release origin into clickable internal links.
  • The primary Topic Trail keeps its visible label, and secondary Topic Trails appear under Also in.
  • Human-readable dates use UTC formatting so build-machine time zones cannot shift the displayed day.
  • Sources retain their resolved order and field attachments during projection.
  • Neighbor links use the same latest-material-activity, Date Added, immutable-ID order as the Homepage; the route reverses adjacent indices into Previous and Next labels for reading flow.
  • The page contains no local source comparator, client request, loading skeleton, hydration directive, catch-all route, or redirect for unknown slugs.
  • Decorative connector geometry never supplies dates, nodes, intermediate states, or chart semantics.

Cross-System Edge Cases

  • Canonical Records owns valid Entry fields, Markdown profiles, controlled values, and label maps. The feature consumes those contracts without widening them.
  • Publication Revisions owns immutable snapshots and material activity. The page cannot infer Date Updated from editable canonical data.
  • Release Construction owns current snapshot selection, source ordering, relationships, routes, canonical URLs, and production validity.
  • Entry Preview intentionally shows the v2 Summary and a smaller field subset, plus only its display-priority Domain and primary Topic Trail.
  • Stage 1 Topic Trail Page consumes the Entry's resolved primary and secondary relationships to build trail membership. The Entry Page only presents and links those relationships.
  • Frontier Atlas owns tokens, typography roles, focus treatment, status treatments, and responsive primitives. The Entry Page owns only their feature-specific composition.
  • The Stage 1 Methodology Page owns the public definitions and versioned Methodology routes. The Entry Page consumes the resolved Methodology link without owning the rulebook.
  • Stage 1 Site Shell owns the shared document order and navigation. Entry routes have no active Header item.
  • Static Application Foundation owns Astro's static build, application-release adapter boundary, and browser-test environment.

Invariants

  • One validated current public Entry v2 produces one canonical static Entry route.
  • Entries whose latest publication state is not public and unknown slugs never produce Entry Page HTML.
  • Exactly one H1 and the approved H2 and H3 hierarchy remain visible in normal reading order.
  • Title, Summary, Reality Check, assessment, and Takeaway appear before sources and navigation.
  • Context, Takeaway, thread relationships, sources, provenance, and neighbors remain visible without tabs, accordions, or client JavaScript.
  • Every Domain and Topic Trail association remains inspectable.
  • Explanatory Methodology links remain separate from record values and relationship destinations.
  • Internal record links stay on the current origin; the page's canonical metadata remains absolute.
  • Source order comes from the resolved Entry and stays consistent with Dataset generation.
  • The resolved primary Topic Trail description remains visible in Continue the Thread.
  • The page remains one maintained record without a sidebar, nested generic cards, hero media, scoring, or article-style embellishment.
  • Unknown slugs retain their URL and return a genuine HTTP 404.
  • Rendering adds no telemetry, browser logging, persistent logs, or runtime data dependency.

Implementation Landmarks

  • src/features/entry-page/ — View-model projection, Astro record rendering, and feature-owned responsive styles.
  • src/pages/entries/[slug].astro — Thin static route generation over the selected application release.
  • src/pages/404.astro — Generic static not-found page.
  • src/shared/entry-markdown/ — Entry-specific inline and block Markdown APIs.
  • src/shared/canonical-markdown/ — Shared safe Markdown parsing, escaping, and semantic rendering.
  • src/shared/methodology-navigation/ — Stable Methodology fragments and version-specific help-link construction.
  • src/shared/public-navigation/ — Same-site paths derived from validated canonical URLs.
  • src/domain/source-ordering/ — Pure public source comparator and copied-array ordering helper.
  • src/adapters/application-release/ — Named production and fixed-metadata development/test release sources.
  • tests/features/, tests/components/, tests/domain/, and tests/browser/ — Projection, Markdown, source-ordering, route, responsive, 404, and accessibility coverage.

Before Changing the Entry Page

Check:

  • Whether every value still comes from one complete ResolvedPublicEntry.
  • Whether the route still uses the application release boundary and preserves the production descriptor gate.
  • Whether release resolution and Dataset generation still share the source-ordering helper while the page performs no sorting.
  • Whether canonical records and immutable snapshots remain unchanged by public ordering or projection.
  • Whether heading and section order, conditional content, null fallbacks, and status wording remain exact.
  • Whether every Domain, primary Topic Trail, and secondary Topic Trail remains visible.
  • Whether the Methodology provenance link uses the Entry's resolved immutable version URL.
  • Whether that exact Methodology version route remains generated alongside the current route.
  • Whether Markdown changes preserve escaping, safe link protocols, supported semantics, and Entry Preview behavior.
  • Whether desktop, tablet, and mobile layouts retain visible focus, grayscale meaning, and no horizontal overflow.
  • Whether unknown slugs remain absent from static paths and return the generic static 404.html.
  • Whether route, projection, Markdown, ordering, browser, and Axe tests cover the changed behavior.