diff --git a/Justfile b/Justfile
index 5e1bc39..6eef62a 100644
--- a/Justfile
+++ b/Justfile
@@ -351,27 +351,27 @@ validate-rsr:
for f in .editorconfig .gitignore Justfile README.adoc LICENSE 0-AI-MANIFEST.a2ml; do
[ -f "$f" ] || MISSING="$MISSING $f"
done
- for f in .machine_readable/STATE.a2ml .machine_readable/META.a2ml .machine_readable/ECOSYSTEM.a2ml .machine_readable/anchors/ANCHOR.a2ml .machine_readable/policies/MAINTENANCE-AXES.a2ml .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml .machine_readable/policies/SOFTWARE-DEVELOPMENT-APPROACH.a2ml; do
+ for f in .machine_readable/6a2/STATE.a2ml .machine_readable/6a2/META.a2ml .machine_readable/6a2/ECOSYSTEM.a2ml .machine_readable/anchors/ANCHOR.a2ml .machine_readable/policies/MAINTENANCE-AXES.a2ml .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml .machine_readable/policies/SOFTWARE-DEVELOPMENT-APPROACH.a2ml; do
[ -f "$f" ] || MISSING="$MISSING $f"
done
- for f in licensing/exhibits/EXHIBIT-A-ETHICAL-USE.txt licensing/exhibits/EXHIBIT-B-QUANTUM-SAFE.txt licensing/texts/MPL-2.0.txt; do
+ for f in docs/legal/EXHIBIT-A-ETHICAL-USE.txt docs/legal/EXHIBIT-B-QUANTUM-SAFE.txt LICENSES/MPL-2.0.txt; do
[ -f "$f" ] || MISSING="$MISSING $f"
done
for f in src/interface/abi src/interface/generated ffi/zig; do
[ -d "$f" ] || MISSING="$MISSING $f"
done
- for f in docs/maintenance/MAINTENANCE-CHECKLIST.adoc docs/practice/SOFTWARE-DEVELOPMENT-APPROACH.adoc; do
+ for f in docs/governance/MAINTENANCE-CHECKLIST.adoc docs/governance/SOFTWARE-DEVELOPMENT-APPROACH.adoc; do
[ -f "$f" ] || MISSING="$MISSING $f"
done
- if [ -f ".machine_readable/META.a2ml" ]; then
- grep -q 'axis-1 = "must > intend > like"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:axis-1"
- grep -q 'axis-2 = "corrective > adaptive > perfective"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:axis-2"
- grep -q 'axis-3 = "systems > compliance > effects"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:axis-3"
- grep -q 'scoping-first = true' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:scoping-first"
- grep -q 'idris-unsound-scan = "believe_me/assert_total"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:idris-unsound-scan"
- grep -q 'audit-focus = "systems in place, documentation explains actual state, safety/security accounted for, observed effects reviewed"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:audit-focus"
- grep -q 'compliance-focus = "seams/compromises/exception register, bounded exceptions, anti-drift checks"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:compliance-focus"
- grep -q 'effects-evidence = "benchmark execution/results and maintainer status dialogue/review"' .machine_readable/META.a2ml || MISSING="$MISSING META.a2ml:effects-evidence"
+ if [ -f ".machine_readable/6a2/META.a2ml" ]; then
+ grep -q 'axis-1 = "must > intend > like"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:axis-1"
+ grep -q 'axis-2 = "corrective > adaptive > perfective"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:axis-2"
+ grep -q 'axis-3 = "systems > compliance > effects"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:axis-3"
+ grep -q 'scoping-first = true' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:scoping-first"
+ grep -q 'idris-unsound-scan = "believe_me/assert_total"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:idris-unsound-scan"
+ grep -q 'audit-focus = "systems in place, documentation explains actual state, safety/security accounted for, observed effects reviewed"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:audit-focus"
+ grep -q 'compliance-focus = "seams/compromises/exception register, bounded exceptions, anti-drift checks"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:compliance-focus"
+ grep -q 'effects-evidence = "benchmark execution/results and maintainer status dialogue/review"' .machine_readable/6a2/META.a2ml || MISSING="$MISSING META.a2ml:effects-evidence"
grep -q 'compliance-tooling = "panic-attack"' .machine_readable/policies/MAINTENANCE-AXES.a2ml || MISSING="$MISSING MAINTENANCE-AXES.a2ml:compliance-tooling"
grep -q 'effects-tooling = "ecological checking with sustainabot guidance"' .machine_readable/policies/MAINTENANCE-AXES.a2ml || MISSING="$MISSING MAINTENANCE-AXES.a2ml:effects-tooling"
grep -q 'source-human = "docs/maintenance/MAINTENANCE-CHECKLIST.adoc"' .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml || MISSING="$MISSING MAINTENANCE-CHECKLIST.a2ml:source-human"
diff --git a/README.adoc b/README.adoc
index ef40b88..2e53d6f 100644
--- a/README.adoc
+++ b/README.adoc
@@ -11,6 +11,8 @@ image:https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=opensources
image:https://img.shields.io/badge/believe__me-0-brightgreen[believe_me: 0]
image:https://img.shields.io/badge/Levels-L1--10_checked_core_(L11--12_draft)-blue[Levels: checked core]
+image::brand/social-preview.svg[typed-wasm,align="center"]
+
[NOTE]
.typed-wasm is a meeting point for two unrelated languages
====
diff --git a/brand/BRAND.adoc b/brand/BRAND.adoc
new file mode 100644
index 0000000..3c41a16
--- /dev/null
+++ b/brand/BRAND.adoc
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: CC-BY-SA-4.0
+= typed-wasm Brand Pack
+:toc:
+
+== Mark
+
+The typed-wasm mark is a grid of memory cells — the schemaless linear-memory
+byte array — laid out behind a single violet *schema bracket* that binds the
+cells into a typed *region*. Two cells glow as typed fields; the rest stay
+faint, still untyped bytes. One linear cell carries an exactly-once tick. The
+glyph states the whole idea in one image: a schema (region) drawn over a
+schemaless database (WASM linear memory), so every load and store is checked
+against the type before it runs.
+
+The name is the symbolism: WebAssembly's linear memory is an untyped byte
+array; *typed-wasm* puts TypeLL's progressive type safety over it — regions
+are tables, loads are SELECT, stores are UPDATE, and the Idris2 prover verifies
+each access at compile time.
+
+|===
+| File | Use
+
+| `icon.svg` | Primary mark with dark background (rounded corners). README, docs, about screens.
+| `icon-square.svg` | Transparent background mark. Favicon, app icon, overlay on custom backgrounds.
+| `social-preview.svg` | GitHub / Open Graph social preview (1280x640). "typed-wasm" wordmark + mark.
+| `marr-levels.svg` | Explainer: the project at David Marr's three levels of analysis.
+| `sandler-submarine.svg` | Impact / case-making: the seven sealed compartments of adoption.
+|===
+
+== Colours
+
+[cols="1,1,2"]
+|===
+| Name | Hex | Use
+
+| WASM Violet | `#a371f7` | Primary brand colour. The schema bracket, typed cells, active states, headings.
+| Schema Indigo | `#8957e5` | Secondary. Untyped-cell outlines, the region grid, muted accents.
+| Background | `#0d1117` | Dark surfaces. GitHub-dark compatible.
+| Foreground | `#e6edf3` | Text on dark background.
+| Glow | `#1d1233` | Radial background glow behind the mark.
+|===
+
+== Typography
+
+Wordmark uses the system font stack: `system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif` at weight 300 (light), lowercase. The subtitle is set at the same stack, weight 300.
+
+No custom font is required. All text is set in the SVG, not a separate font file.
+
+== Rules
+
+- The mark always shows the memory-cell grid with the schema bracket binding a typed region over it. Never draw the typed cells without the faint untyped cells — that would deny the core insight (a schema *over* a schemaless byte array).
+- The violet must be `#a371f7` — do not approximate with other violets/purples.
+- The wordmark is always lowercase `typed-wasm`.
+- On light backgrounds, invert: violet `#6f42c1` strokes and `#1b1f24` text on white/light grey.
+- The subtitle ("regions over a schemaless byte array") is the etymology of the idea, not a marketing strapline; it may appear on repository assets. Sales/marketing straplines never appear on repository assets.
+- Claims on assets stay inside the checked envelope: the L1-L10 core is checked (0 `believe_me`); L11-L12 are draft. Do not put "all levels verified" on any asset (ADR-003).
+
+== Generating raster assets
+
+[source,shell]
+----
+# Requires Inkscape or rsvg-convert (librsvg)
+
+# Favicon (64x64 PNG)
+rsvg-convert -w 64 -h 64 icon-square.svg > favicon-64.png
+
+# App icon (512x512 PNG)
+rsvg-convert -w 512 -h 512 icon.svg > icon-512.png
+
+# Social preview (1280x640 PNG for GitHub)
+rsvg-convert -w 1280 -h 640 social-preview.svg > social-preview.png
+----
diff --git a/brand/icon-square.svg b/brand/icon-square.svg
new file mode 100644
index 0000000..4b6b0cd
--- /dev/null
+++ b/brand/icon-square.svg
@@ -0,0 +1,53 @@
+
diff --git a/brand/icon.svg b/brand/icon.svg
new file mode 100644
index 0000000..24622a1
--- /dev/null
+++ b/brand/icon.svg
@@ -0,0 +1,71 @@
+
diff --git a/brand/marr-levels.svg b/brand/marr-levels.svg
new file mode 100644
index 0000000..b73b64d
--- /dev/null
+++ b/brand/marr-levels.svg
@@ -0,0 +1,52 @@
+
diff --git a/brand/sandler-submarine.svg b/brand/sandler-submarine.svg
new file mode 100644
index 0000000..5412c5f
--- /dev/null
+++ b/brand/sandler-submarine.svg
@@ -0,0 +1,92 @@
+
diff --git a/brand/social-preview.svg b/brand/social-preview.svg
new file mode 100644
index 0000000..86c80dd
--- /dev/null
+++ b/brand/social-preview.svg
@@ -0,0 +1,70 @@
+