+ );
+}
diff --git a/packages/web/src/css/custom.css b/packages/web/src/css/custom.css
index ed7727ac..dde7d43f 100644
--- a/packages/web/src/css/custom.css
+++ b/packages/web/src/css/custom.css
@@ -34,9 +34,25 @@
overflow: auto;
}
-.navbar .draft-warning {
- font-weight: bold;
- text-decoration: underline;
+.navbar .status-indicator {
+ display: inline-flex;
+ align-items: center;
+ padding: 4px 10px;
+ border-radius: 4px;
+ background-color: #d97706;
+ color: white !important;
+ font-size: 0.85rem;
+ font-weight: 500;
+ text-decoration: none !important;
+}
+
+.navbar .status-indicator:hover {
+ background-color: #b45309;
+}
+
+[data-theme="dark"] .navbar .status-indicator {
+ background-color: #f59e0b;
+ color: #1e1e1e !important;
}
/* Styling for Playground */
diff --git a/packages/web/src/pages/status.mdx b/packages/web/src/pages/status.mdx
index ec4b8461..84afb3fb 100644
--- a/packages/web/src/pages/status.mdx
+++ b/packages/web/src/pages/status.mdx
@@ -1,13 +1,54 @@
-# Draft status
+# Specification Status
-:::warning
+import StatusLevelExplainer from "@site/src/components/StatusLevelExplainer";
+import StatusTable from "@site/src/components/StatusTable";
-The **ethdebug/format** specification and this site are incomplete drafts.
-These efforts are an active work in progress and everything here is subject to
-change significantly.
+The **ethdebug/format** specification is actively evolving. Different parts
+of the specification are at different stages of maturity, and we want to be
+transparent about what tooling implementers can rely on today.
-Please watch the [GitHub repository](https://github.com/ethdebug/format) or
-join our [Matrix.chat](https://matrix.to/#/#ethdebug:matrix.org) to follow
-along and contribute.
+## Status Levels
-:::
+We use three status levels to indicate the maturity of each schema section:
+
+
+
+## Current status by schema
+
+
+
+## Guidance for tooling implementers
+
+All schemas have TypeScript type definitions available in
+[`@ethdebug/format`](https://www.npmjs.com/package/@ethdebug/format), useful
+for both debugger and compiler implementations.
+
+### Ready to implement
+
+The **pointer** and **type** schemas are mature enough for implementation:
+
+- **[Pointer schema](/spec/pointer/overview)**: Has a working debugger-side
+ reference implementation (`@ethdebug/pointers`) with comprehensive
+ documentation. Start here if you want to build pointer dereferencing into
+ your debugger.
+
+- **[Type schema](/spec/type/overview)**: Stable design covering all Solidity
+ types.
+
+### Early adopters welcome
+
+The **[program schema](/spec/program/overview)** is under active development.
+The core structure (programs, instructions, contexts) is defined and
+foundational, but context types for function calls, returns, and reverts are
+still being designed.
+
+If you're interested in helping shape this part of the format, we'd love your
+input! However, implementations should expect breaking changes as the design
+evolves.
+
+## Stay informed
+
+- Watch the [GitHub repository](https://github.com/ethdebug/format) for updates
+- Join our [Matrix.chat](https://matrix.to/#/#ethdebug:matrix.org) for
+ discussions
+- Our working group meets bi-weekly on Thursdays at 17:00 Berlin time
diff --git a/packages/web/src/status/status-config.ts b/packages/web/src/status/status-config.ts
new file mode 100644
index 00000000..0900ffa4
--- /dev/null
+++ b/packages/web/src/status/status-config.ts
@@ -0,0 +1,139 @@
+/**
+ * Centralized configuration for schema status information.
+ *
+ * This is the single source of truth for maturity levels, caveats, and
+ * status details across the ethdebug/format specification.
+ */
+
+export type StatusLevel =
+ | "in-design"
+ | "implementable"
+ | "reference-available";
+
+export interface StatusLevelInfo {
+ label: string;
+ color: string;
+ description: string;
+ adoptersNote: string;
+}
+
+export const statusLevels: Record = {
+ "in-design": {
+ label: "In Design",
+ color: "#6366f1", // Indigo
+ description:
+ "Actively being developed. Expect significant changes to structure " +
+ "and semantics.",
+ adoptersNote:
+ "Early feedback welcome, but implementations should expect breaking " +
+ "changes.",
+ },
+ "implementable": {
+ label: "Implementable",
+ color: "#d97706", // Amber
+ description:
+ "Stable enough to build against. Minor changes possible but core " +
+ "design is settled.",
+ adoptersNote:
+ "Tooling can implement against this schema with reasonable confidence.",
+ },
+ "reference-available": {
+ label: "Reference Available",
+ color: "#059669", // Green
+ description:
+ "Stable schema with a working reference implementation available " +
+ "(debugger-side and/or compiler-side).",
+ adoptersNote:
+ "Reference implementation demonstrates correct behavior. Check details " +
+ "for which side (debugger/compiler) has implementations.",
+ },
+};
+
+export interface SchemaStatusInfo {
+ level: StatusLevel;
+ summary: string;
+ caveats: string[];
+ detailsPath: string;
+ referenceUrl?: string;
+}
+
+export const schemaStatus: Record = {
+ pointer: {
+ level: "reference-available",
+ summary:
+ "Comprehensive schema for describing data locations in EVM state. " +
+ "Debugger-side reference implementation available in @ethdebug/pointers.",
+ caveats: [
+ "Pointer templates cannot rename their output region names, limiting " +
+ "composability for complex scenarios.",
+ "No compiler-side reference implementation yet.",
+ ],
+ detailsPath: "/spec/pointer/overview#status",
+ referenceUrl: "/docs/implementation-guides/pointers",
+ },
+ type: {
+ level: "implementable",
+ summary:
+ "Complete coverage of Solidity types (elementary and complex).",
+ caveats: [
+ "No support for generic types (e.g., parameterized types).",
+ ],
+ detailsPath: "/spec/type/overview#status",
+ },
+ program: {
+ level: "in-design",
+ summary:
+ "Schema for describing high-level program structure and instruction " +
+ "contexts. Core structure is foundational, but context system is " +
+ "actively evolving.",
+ caveats: [
+ "Context types for function calls, returns, and reverts are still " +
+ "being designed.",
+ "Broader structural changes may occur to accommodate new concerns.",
+ ],
+ detailsPath: "/spec/program/overview#status",
+ },
+ data: {
+ level: "implementable",
+ summary:
+ "Foundational schemas for common data representations (hex strings, " +
+ "unsigned integers, values).",
+ caveats: [],
+ detailsPath: "/spec/data/overview#status",
+ },
+ materials: {
+ level: "implementable",
+ summary:
+ "Schemas for compilation metadata, source files, and source ranges.",
+ caveats: [],
+ detailsPath: "/spec/materials/overview#status",
+ },
+ info: {
+ level: "implementable",
+ summary:
+ "Intentionally minimal schema for representing compilation-related " +
+ "debug information.",
+ caveats: [],
+ detailsPath: "/spec/info/overview#status",
+ },
+};
+
+/**
+ * Get the overall project status level (the lowest maturity across all
+ * primary schemas).
+ */
+export function getOverallStatus(): StatusLevel {
+ const primarySchemas = ["pointer", "type", "program"];
+ const levels: StatusLevel[] = primarySchemas.map(
+ (key) => schemaStatus[key].level
+ );
+
+ // Return the least mature level
+ if (levels.includes("in-design")) {
+ return "in-design";
+ }
+ if (levels.includes("implementable")) {
+ return "implementable";
+ }
+ return "reference-available";
+}
diff --git a/packages/web/src/theme/MDXComponents.tsx b/packages/web/src/theme/MDXComponents.tsx
index 3adeae13..a69570c0 100644
--- a/packages/web/src/theme/MDXComponents.tsx
+++ b/packages/web/src/theme/MDXComponents.tsx
@@ -3,11 +3,13 @@ import isInternalUrl from '@docusaurus/isInternalUrl';
import MDXComponents from '@theme-original/MDXComponents';
import MDXA from "@theme-original/MDXComponents/A";
import type { Props as LinkProps } from "@docusaurus/Link";
-import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; // Import the FontAwesomeIcon component.
-import { library } from '@fortawesome/fontawesome-svg-core'; // Import the library component.
-import { fab } from '@fortawesome/free-brands-svg-icons'; // Import all brands icons.
-import { fas } from '@fortawesome/free-solid-svg-icons'; // Import all solid icons.
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { library } from '@fortawesome/fontawesome-svg-core';
+import { fab } from '@fortawesome/free-brands-svg-icons';
+import { fas } from '@fortawesome/free-solid-svg-icons';
import IconExternalLink from "@theme-original/Icon/ExternalLink";
+import StatusBadge from "@site/src/components/StatusBadge";
+import StatusBanner from "@site/src/components/StatusBanner";
library.add(fab, fas); // Add all icons to the library so you can use them without importing them individually.
@@ -24,5 +26,7 @@ export default {
// Re-use the default mapping
...MDXComponents,
a: A,
- Icon: FontAwesomeIcon, // Make the FontAwesomeIcon component available in MDX as .
+ Icon: FontAwesomeIcon,
+ StatusBadge,
+ StatusBanner,
};