Skip to content
Merged
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
  •  
  •  
  •  
20 changes: 17 additions & 3 deletions .github/funding.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
# Funding Configuration
# See: https://docs.github.com/en/repositories/managing-your-repositorys-custom-fields/displaying-a-sponsor-button-in-your-repository
# SPDX-License-Identifier: MPL-2.0 for code
# SPDX-License-Identifier: CC-BY-SA-4.0 for documentation
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

github: metadatastician
# These are supported funding model platforms

buy_me_a_coffee: jonathan.jewell
community_bridge: jonathan-jewell
github: hyperpolymath
indieweb:
issuehunt: hyperpolymath
ko_fi: hyperpolymath
lfx_crowdfunding: hyperpolymath
liberapay: hyperpolymath
open_collective: jonathan-jewell
patreon: cc_studio
polar: hyperpolymath
thanks_dev: hyperpolymath
2 changes: 1 addition & 1 deletion .github/workflows/secret-scanner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ permissions:
contents: read
jobs:
secret-scan:
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@7fdc2705df74b4e352d2a1cde3e87a5923fdf329
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@5b1d00229e5e8c0c0fbfedc7e80f37ea50f49236
secrets: inherit
20 changes: 0 additions & 20 deletions .gitmodules

This file was deleted.

34 changes: 34 additions & 0 deletions FUNDING
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// SPDX-License-Identifier: MPL-2.0 for code
// SPDX-License-Identifier: CC-BY-SA-4.0 for documentation
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

= Funding
:toc: macro
:toclevels: 2

This document lists the supported funding platforms for the hyperpolymath and metadatastician estates.

== Supported Funding Platforms

[cols="1,1",options="header"]
|===
| Platform | Username
| Buy Me a Coffee | jonathan.jewell
| Community Bridge | jonathan-jewell
| GitHub Sponsors | hyperpolymath
| IndieWeb |
| IssueHunt | hyperpolymath
| Ko-fi | hyperpolymath
| LFX Crowdfunding | hyperpolymath
| LiberaPay | hyperpolymath
| Open Collective | jonathan-jewell
| Patreon | cc_studio
| Polar | hyperpolymath
| Thanks Dev | hyperpolymath
|===

== Usage

These platforms provide financial support mechanisms for the projects within the hyperpolymath and metadatastician estates. Contributions through any of these platforms help sustain development, maintenance, and governance of the open source projects.

For more information about contributing or sponsoring specific projects, please refer to the project's README file or contact the maintainers directly.
60 changes: 60 additions & 0 deletions members/tooling/a2ml-estate-normaliser/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# https://editorconfig.org

root = true

# Default settings for all files
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true

# Matched file extensions
[*.{py,js,ts,jsx,tsx,json,yml,yaml,toml,md,html,css,scss,less,sass,sh,zsh,bash,fish,rst,txt,ql,sql,csv,tsv,xml,svg,rs,go,java,kt,kts,scala,rb,php,swift,dart,elm,lua,zig,coq,v,agda,idr,purs}]
indent_size = 4

# Makefile requires tabs
[Makefile]
indent_style = tab

# Dockerfile
[Dockerfile]
indent_style = space
indent_size = 4

# Shell scripts
[*.{sh,zsh,bash,fish}]
indent_size = 2

# Haskell
[*.hs]
indent_size = 2

# Nix
[*.nix]
indent_size = 2

# Rust
[*.rs]
indent_size = 4

# Go
[*.go]
indent_style = tab

# Zig
[*.zig]
tab_width = 4
indent_style = space

# Markdown - preserve line breaks
[*.md]
trim_trailing_whitespace = false

# Configuration files
[*.{json,yml,yaml,toml,xml,svg}]
indent_size = 2
89 changes: 89 additions & 0 deletions members/tooling/a2ml-estate-normaliser/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Auto-detect text files and perform LF normalization
* text=auto

# Denote all Python files as text
*.py text

# Denote all shell scripts as text
*.sh text

# Denote all Markdown files as text
*.md text

# Denote all YAML files as text
*.yaml text
*.yml text

# Denote all JSON files as text
*.json text

# Denote all TOML files as text
*.toml text

# Denote all JavaScript/TypeScript files as text
*.js text
*.ts text
*.jsx text
*.tsx text

# Denote all HTML files as text
*.html text

# Denote all CSS files as text
*.css text

# Denote all Rust files as text
*.rs text

# Denote all Java files as text
*.java text

# Denote all Go files as text
*.go text

# Denote all C/C++ files as text
*.c text
*.cpp text
*.h text
*.hpp text

# Denote all Lua files as text
*.lua text

# Denote all Zig files as text
*.zig text

# Line endings
*.sh eol=lf
*.py eol=lf
*.md eol=lf
*.yaml eol=lf
*.yml eol=lf
*.json eol=lf
*.toml eol=lf
*.js eol=lf
*.ts eol=lf
Makefile eol=lf
Dockerfile eol=lf

# Language-specific attributes
*.py diff=python
*.js diff=javascript
*.ts diff=typescript
*.rs diff=rust
*.go diff=go
*.java diff=java
*.zig diff=zig

# Linguist-specific overrides
*.coq linguist-language=Coq
*.v linguist-language=V
*.agda linguist-language=Agda
*.idr linguist-language=Idris
*.purs linguist-language=PureScript
*.elm linguist-language=Elm
*.rkt linguist-language=Racket
*.scm linguist-language=Scheme
*.clj linguist-language=Clojure
*.cljs linguist-language=Clojure
*.cljc linguist-language=Clojure
34 changes: 34 additions & 0 deletions members/tooling/a2ml-estate-normaliser/.github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# SPDX-License-Identifier: MPL-2.0
# CODEOWNERS - Define code review assignments for GitHub
# See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

# Default: sole maintainer for all files
* @hyperpolymath

# Security-sensitive files require explicit ownership
SECURITY.md @hyperpolymath
.github/workflows/ @hyperpolymath
.machine_readable/ @hyperpolymath
contractiles/ @hyperpolymath

# License files
LICENSE @hyperpolymath
LICENSES/ @hyperpolymath

# Configuration
.gitignore @hyperpolymath
.github/ @hyperpolymath

# Documentation
README* @hyperpolymath
CONTRIBUTING* @hyperpolymath
CODE_OF_CONDUCT* @hyperpolymath
GOVERNANCE* @hyperpolymath
MAINTAINERS* @hyperpolymath
CHANGELOG* @hyperpolymath
ROADMAP* @hyperpolymath

# Build and CI
Justfile @hyperpolymath
Makefile @hyperpolymath
*.sh @hyperpolymath
4 changes: 4 additions & 0 deletions members/tooling/a2ml-estate-normaliser/.github/funding.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Funding Configuration
# See: https://docs.github.com/en/repositories/managing-your-repositorys-custom-fields/displaying-a-sponsor-button-in-your-repository

github: metadatastician
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# SPDX-License-Identifier: MPL-2.0
# Dormant push-email notification. ARMED by setting the repo variable
# PUSH_EMAIL_ENABLED=true (the single on/off switch). Addresses are pre-filled;
# sending needs the org SMTP secrets (SMTP_HOST/PORT/USER/PASS). Inherited by
# new repos from the template; placed on existing repos by the farm sweep.
name: Push email notification
on:
push: {}
permissions:
contents: read
jobs:
notify:
name: Email on push
if: ${{ vars.PUSH_EMAIL_ENABLED == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Send push notification email
uses: dawidd6/action-send-mail@6e502825a508b867ab2954ad6343b68787624c01 # pinned
with:
server_address: ${{ secrets.SMTP_HOST }}
server_port: ${{ secrets.SMTP_PORT }}
secure: true
username: ${{ secrets.SMTP_USER }}
password: ${{ secrets.SMTP_PASS }}
from: "GitHub Push <${{ secrets.SMTP_USER }}>"
to: "jonathan.jewell@gmail.com j.d.a.jewell@open.ac.uk"
subject: "[${{ github.repository }}] push to ${{ github.ref_name }} by ${{ github.actor }}"
body: |
Repository: ${{ github.repository }}
Branch: ${{ github.ref_name }}
Pusher: ${{ github.actor }}
Compare: ${{ github.event.compare }}
Head msg: ${{ github.event.head_commit.message }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-License-Identifier: MPL-2.0
# Calls the estate's shared secret scanner (gitleaks + rust-secrets +
# shell-secrets). Added because this repository had NO leak scanning at all.
#
# `secrets: inherit` is REQUIRED — without it the gitleaks action's inner
# secrets.GITHUB_TOKEN is empty and the scan silently degrades.
name: "Secret Scanner"
on:
pull_request:
push:
branches: [main, master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
secret-scan:
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@bd0df9ead7faf0cdfe0e13e7966d91e28d0101d4
secrets: inherit
15 changes: 15 additions & 0 deletions members/tooling/a2ml-estate-normaliser/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)

# Cargo build artifacts
target/

# IDE
.idea/
.vscode/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
#
# AGENTIC.a2ml — AI agent constraints and capabilities
# Defines what AI agents can and cannot do in this repository.

[metadata]
version = "0.1.0"
last-updated = "2026-04-11"

[agent-permissions]
can-edit-source = true
can-edit-tests = true
can-edit-docs = true
can-edit-config = true
can-create-files = true

[agent-constraints]
# What AI agents must NOT do:
# - Never use banned language patterns (believe_me, unsafeCoerce, etc.)
# - Never commit secrets or credentials
# - Never use banned languages (TypeScript, Python, Go, etc.)
# - Never place state files in repository root (must be in .machine_readable/)
# - Never use AGPL license (use MPL-2.0)

[maintenance-integrity]
fail-closed = true
require-evidence-per-step = true
allow-silent-skip = false
require-rerun-after-fix = true
release-claim-requires-hard-pass = true

# ============================================================================
# METHODOLOGY (ADR-002)
# ============================================================================
# Detailed methodology configuration lives in:
# .machine_readable/bot_directives/methodology.a2ml
# .machine_readable/bot_directives/coverage.a2ml
# .machine_readable/bot_directives/debt.a2ml
#
# AGENTIC.a2ml declares WHAT agents can do (permissions, gating).
# bot_directives/ declares HOW agents should work (methodology).

[methodology]
instructions-dir = ".machine_readable/bot_directives/"
default-mode = "hybrid"

[automation-hooks]
# on-enter: Read 0-AI-MANIFEST.a2ml, then STATE.a2ml, then bot_directives/
# on-exit: Update STATE.a2ml, coverage.a2ml, and debt.a2ml with session outcomes
# on-commit: Run just validate-rsr
Loading
Loading