Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .bun-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1.3.10
145 changes: 145 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# SPDX-License-Identifier: MPL-2.0
# Hyperpolymath estate canonical .editorconfig (standards#343 phase 1)
# Canon lives in rsr-template-repo; do not add a per-repo name to this header.
# https://editorconfig.org

root = true

# --- Estate baseline -------------------------------------------------------
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

# --- Prose: trailing whitespace is significant -----------------------------
[*.md]
trim_trailing_whitespace = false

[*.adoc]
trim_trailing_whitespace = false

# --- 4-space languages -----------------------------------------------------
[*.rs]
indent_size = 4

[*.zig]
indent_size = 4

[*.jl]
indent_size = 4

[*.py]
indent_size = 4

[*.c]
indent_size = 4

[*.h]
indent_size = 4

[*.php]
indent_size = 4

# --- 3-space languages (Ada / GNAT house style) ----------------------------
[*.ada]
indent_size = 3

[*.adb]
indent_size = 3

[*.ads]
indent_size = 3

[*.gpr]
indent_size = 3

# --- 2-space languages (explicit; matches the [*] default) -----------------
[*.hs]
indent_size = 2

[*.ex]
indent_size = 2

[*.exs]
indent_size = 2

[*.ncl]
indent_size = 2

[*.rkt]
indent_size = 2

[*.scm]
indent_size = 2

[*.idr]
indent_size = 2

[*.ipkg]
indent_size = 2

[*.k9]
indent_size = 2

[*.a2ml]
indent_size = 2

[*.agda]
indent_size = 2

[*.lean]
indent_size = 2

[*.ebnf]
indent_size = 2

# --- Tab-mandatory formats -------------------------------------------------
[Makefile]
indent_style = tab

[*.go]
indent_style = tab

# --- Task runners ----------------------------------------------------------
[Justfile]
indent_style = space
indent_size = 4

[justfile]
indent_style = space
indent_size = 4

[*.just]
indent_style = space
indent_size = 4

[Mustfile]
indent_style = space
indent_size = 4

# --- Platform-mandated line endings ----------------------------------------
# Windows batch/PowerShell hosts require CRLF; keep in step with .gitattributes.
[*.bat]
end_of_line = crlf

[*.cmd]
end_of_line = crlf

[*.ps1]
end_of_line = crlf

# --- Legacy / retired toolchains (retained for byte hygiene only) ----------
# ReScript (LANGUAGE-POLICY 1.2) and Nix (retired 2026-06-01) are no longer
# adopted for new work. These sections are inert where the files are absent and
# keep surviving files from drifting. Removal is a per-repo judgement.
[*.res]
indent_size = 2

[*.resi]
indent_size = 2

[*.nix]
indent_size = 2
17 changes: 17 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# SPDX-License-Identifier: MPL-2.0
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# Activate the MetaManifold-WebUI dev environment on `cd` (direnv).
# Install direnv: https://direnv.net/

# Precedence: mise (exact CI-pinned binaries) first, Guix shell otherwise.
if has mise; then
use mise
elif has guix && [ -f guix.scm ]; then
use guix
fi

# Estate launcher discovery.
export METAMANIFOLD_REPO_DIR="$PWD"

# Real secrets belong in .env (gitignored) — never commit them here.
dotenv_if_exists
135 changes: 135 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# SPDX-License-Identifier: MPL-2.0
# Hyperpolymath estate canonical .gitattributes (standards#343 phase 1)
# Canon lives in rsr-template-repo; do not add a per-repo name to this header.
#
# Only diff drivers that git actually ships are used here. MEASURED on git
# 2.47.3: diff=go and diff=zig are NOT drivers (git silently falls back to the
# default heuristic); the Go driver is named `golang`.

* text=auto eol=lf

# --- Source ----------------------------------------------------------------
*.rs text eol=lf diff=rust
*.ex text eol=lf diff=elixir
*.exs text eol=lf diff=elixir
*.ada text eol=lf diff=ada
*.adb text eol=lf diff=ada
*.ads text eol=lf diff=ada
*.gpr text eol=lf diff=ada
*.go text eol=lf diff=golang
*.py text eol=lf diff=python
*.scm text eol=lf diff=scheme linguist-language=Scheme
*.rkt text eol=lf
*.jl text eol=lf
*.hs text eol=lf
*.zig text eol=lf
*.chpl text eol=lf
*.idr text eol=lf linguist-language=Idris
*.ipkg text eol=lf linguist-language=Idris
*.agda text eol=lf linguist-language=Agda
*.lagda text eol=lf linguist-language=Agda
*.lean text eol=lf
# `.v` is ambiguous (Coq / Verilog / V). This estate's `.v` files are Coq
# proofs; 49 repos currently mislabel them `linguist-language=V`.
*.v text eol=lf linguist-language=Coq
*.ncl text eol=lf
*.k9 text eol=lf linguist-language=Nickel
*.a2ml text eol=lf linguist-language=TOML
*.ebnf text eol=lf
*.ts text eol=lf
*.js text eol=lf
*.sh text eol=lf diff=bash
*.bash text eol=lf diff=bash

# --- Windows hosts require CRLF --------------------------------------------
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf

# --- Docs ------------------------------------------------------------------
*.md text eol=lf diff=markdown
*.adoc text eol=lf
*.txt text eol=lf
*.tex text eol=lf diff=tex
*.bib text eol=lf diff=bibtex

# --- Data / config ---------------------------------------------------------
*.json text eol=lf
*.jsonl text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.toml text eol=lf
*.svg text eol=lf
*.csv text eol=lf
*.html text eol=lf diff=html
*.css text eol=lf diff=css

# --- Repo control files ----------------------------------------------------
.gitignore text eol=lf
.gitattributes text eol=lf
.editorconfig text eol=lf
.tool-versions text eol=lf
Justfile text eol=lf
justfile text eol=lf
*.just text eol=lf
Mustfile text eol=lf
Makefile text eol=lf
Containerfile text eol=lf

# --- Binary ----------------------------------------------------------------
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.webp binary
*.ico binary
*.pdf binary
*.woff binary
*.woff2 binary
*.ttf binary
*.otf binary
*.eot binary
*.zip binary
*.tar binary
*.gz binary
*.xz binary
*.bz2 binary
*.so binary
*.dylib binary
*.dll binary
*.exe binary
*.wasm binary
*.rlib binary
*.beam binary

# --- Sequencing data -------------------------------------------------------
# History carried 269 MiB of these. They are binary, they must never be
# line-ending-normalised (a CRLF rewrite corrupts a gzip member), and they are
# not source. The recurrence guard with teeth is scripts/check-blob-hygiene.sh,
# run by .githooks/pre-commit and by CI; these lines are hygiene, not the gate.
*.fastq binary -diff linguist-generated=true
*.fastq.gz binary -diff linguist-generated=true
*.fq binary -diff linguist-generated=true
*.fq.gz binary -diff linguist-generated=true
*.fasta binary -diff linguist-generated=true
*.fa binary -diff linguist-generated=true
*.sam binary -diff linguist-generated=true
*.bam binary -diff linguist-generated=true

# --- Generated lockfiles: no diff noise, not counted as source -------------
Cargo.lock text eol=lf -diff linguist-generated=true
mix.lock text eol=lf -diff linguist-generated=true
bun.lock text eol=lf -diff linguist-generated=true
bun.lockb binary -diff linguist-generated=true
pnpm-lock.yaml text eol=lf -diff linguist-generated=true
package-lock.json text eol=lf -diff linguist-generated=true

# --- Legacy / retired toolchains (byte hygiene only) -----------------------
# ReScript is retired (LANGUAGE-POLICY 1.2); Nix was retired 2026-06-01. These
# lines keep surviving files normalised and keep retired tech out of the
# GitHub primary-language badge. Removal is a per-repo judgement, never a sweep.
*.res text eol=lf
*.resi text eol=lf
**/*.res linguist-detectable=false
*.nix text eol=lf
flake.lock text eol=lf -diff linguist-generated=true
22 changes: 22 additions & 0 deletions .githooks/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: MPL-2.0
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
#
# commit-msg hook — enforces the estate conventional-commit subject.
# Enable once per clone: git config core.hooksPath .githooks
# (The corresponding template is .gitmessage; CI re-checks on push.)
msg_file=$1
subject=$(head -1 "$msg_file")

# Types per .gitmessage "Allowed Types" list.
if ! printf '%s' "$subject" | grep -qE '^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\([a-zA-Z0-9_/-]+\))?!?: .{1,72}$'; then
cat >&2 <<EOF
commit-msg: REJECTED subject:
$subject
Required form:
<type>(<optional scope>): <subject> (type in: feat fix docs style
refactor perf test build ci chore revert; subject 1..72 chars)
EOF
exit 1
fi
exit 0
12 changes: 12 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: MPL-2.0
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
#
# pre-commit hook -- refuses a commit that would reintroduce the sequencing
# blobs stripped from history. Enable once per clone with `just hooks`
# (or `git config core.hooksPath .githooks`).
#
# The rule itself lives in scripts/check-blob-hygiene.sh and is shared verbatim
# with the CI blob-hygiene step, so the local gate and the remote gate cannot
# disagree about what is allowed.
exec "$(git rev-parse --show-toplevel)/scripts/check-blob-hygiene.sh" --staged
12 changes: 12 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# SPDX-License-Identifier: MPL-2.0
# Ownership for the hyperpolymath fork. Application/domain questions are
# routed to upstream (JoshuaJewell/MetaManifold-WebUI).

* @hyperpolymath

# Engineering estate (types, tests, CI, tooling) — fork owner
frontend/src/types/ @hyperpolymath
frontend/tests/ @hyperpolymath
frontend/bench/ @hyperpolymath
.github/ @hyperpolymath
scripts/ @hyperpolymath
Loading
Loading