Skip to content

Commit aa4b836

Browse files
chore: consolidate a2ml repos into ecosystem monorepo (#23)
Consolidated the following repos into a2ml-ecosystem/ subdirectories: - a2ml-deno → deno/ - a2ml_ex → ex/ - a2ml_gleam → gleam/ - a2ml-haskell → haskell/ - a2ml-rs → rs/ - a2ml-showcase → showcase/ - a2ml-validate-action → validate-action/ This restructures the A2ML ecosystem as a single monorepo, simplifying the repository structure and making it easier to manage related components together. Co-authored-by: Mistral Vibe <vibe@mistral.ai>
1 parent a8e4caa commit aa4b836

1,462 files changed

Lines changed: 127928 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

deno/.devcontainer/Containerfile

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}>
3+
#
4+
# Dev Container image for {{PROJECT_NAME}}
5+
# Base: Chainguard Wolfi (minimal, supply-chain-secure)
6+
# Build: podman build -t {{PROJECT_NAME}}-dev -f .devcontainer/Containerfile .
7+
8+
FROM cgr.dev/chainguard/wolfi-base:latest
9+
10+
# Install common development tools
11+
RUN apk update && apk add --no-cache \
12+
bash \
13+
curl \
14+
git \
15+
openssh-client \
16+
ca-certificates \
17+
build-base \
18+
posix-libc-utils \
19+
shadow \
20+
&& rm -rf /var/cache/apk/*
21+
22+
# Create non-root dev user (matches devcontainer.json remoteUser)
23+
RUN groupadd -g 1000 nonroot || true \
24+
&& useradd -m -u 1000 -g 1000 -s /bin/bash nonroot || true
25+
26+
# Set workspace directory
27+
WORKDIR /workspaces/{{PROJECT_NAME}}
28+
29+
# Default shell
30+
ENV SHELL=/bin/bash
31+
32+
USER nonroot

deno/.devcontainer/README.adoc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SPDX-License-Identifier: CC-BY-SA-4.0
2+
= Dev Container Usage
3+
:author: {{AUTHOR}} <{{AUTHOR_EMAIL}}>
4+
5+
== Overview
6+
7+
This dev container uses `cgr.dev/chainguard/wolfi-base` with git, curl, bash, and just pre-installed. Dev container features add git, just, and nickel automatically.
8+
9+
== VS Code (Local)
10+
11+
. Install the *Dev Containers* extension (`ms-vscode-remote.remote-containers`).
12+
. Set `dev.containers.dockerPath` to `podman` in VS Code settings.
13+
. Open the repo folder, then choose **Reopen in Container** from the command palette.
14+
15+
== GitHub Codespaces
16+
17+
. From the repository on GitHub, click **Code > Codespaces > New codespace**.
18+
. The container builds automatically from this configuration.
19+
20+
== Gitpod
21+
22+
. Prefix the repo URL with `https://gitpod.io/#` to launch a workspace.
23+
. Gitpod reads `devcontainer.json` and builds the environment.
24+
25+
== Customization
26+
27+
Replace `{{PROJECT_NAME}}` placeholders in both `devcontainer.json` and `Containerfile` with your actual project name. Run `just deps` to verify the environment after first launch.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}>
3+
//
4+
// Dev Container configuration for {{PROJECT_NAME}}
5+
// Works with: VS Code Dev Containers, GitHub Codespaces, Gitpod
6+
// Container runtime: Podman (recommended) or any OCI-compliant runtime
7+
{
8+
"name": "{{PROJECT_NAME}}",
9+
10+
"build": {
11+
"dockerfile": "Containerfile",
12+
"context": ".."
13+
},
14+
15+
"features": {
16+
"ghcr.io/devcontainers/features/git:1": {
17+
"ppa": false,
18+
"version": "latest"
19+
},
20+
"ghcr.io/jdx/devcontainer-features/just:1": {},
21+
"ghcr.io/nickel-lang/devcontainer-feature:0": {}
22+
},
23+
24+
"postCreateCommand": "just deps",
25+
26+
"remoteUser": "nonroot",
27+
28+
"containerEnv": {
29+
"EDITOR": "code --wait",
30+
"LANG": "C.UTF-8"
31+
},
32+
33+
"customizations": {
34+
"vscode": {
35+
"extensions": [
36+
"EditorConfig.EditorConfig",
37+
"eamodio.gitlens",
38+
"streetsidesoftware.code-spell-checker",
39+
"timonwong.shellcheck",
40+
"tamasfe.even-better-toml",
41+
"skellock.just",
42+
"redhat.vscode-yaml",
43+
"DavidAnson.vscode-markdownlint",
44+
"asciidoctor.asciidoctor-vscode",
45+
"usernamehw.errorlens"
46+
],
47+
"settings": {
48+
"editor.formatOnSave": true,
49+
"editor.insertSpaces": true,
50+
"editor.tabSize": 2,
51+
"files.trimTrailingWhitespace": true,
52+
"files.insertFinalNewline": true,
53+
"files.trimFinalNewlines": true,
54+
"[makefile]": {
55+
"editor.insertSpaces": false
56+
}
57+
}
58+
},
59+
"codespaces": {
60+
"openFiles": [
61+
"README.adoc"
62+
]
63+
}
64+
},
65+
66+
"forwardPorts": [],
67+
68+
"shutdownAction": "stopContainer"
69+
}

deno/.editorconfig

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# RSR-template-repo - Editor Configuration
2+
# https://editorconfig.org
3+
4+
root = true
5+
6+
[*]
7+
charset = utf-8
8+
end_of_line = lf
9+
indent_size = 2
10+
indent_style = space
11+
insert_final_newline = true
12+
trim_trailing_whitespace = true
13+
14+
[*.md]
15+
trim_trailing_whitespace = false
16+
17+
[*.adoc]
18+
trim_trailing_whitespace = false
19+
20+
[*.rs]
21+
indent_size = 4
22+
23+
[*.ex]
24+
indent_size = 2
25+
26+
[*.exs]
27+
indent_size = 2
28+
29+
[*.zig]
30+
indent_size = 4
31+
32+
[*.ada]
33+
indent_size = 3
34+
35+
[*.adb]
36+
indent_size = 3
37+
38+
[*.ads]
39+
indent_size = 3
40+
41+
[*.hs]
42+
indent_size = 2
43+
44+
[*.res]
45+
indent_size = 2
46+
47+
[*.resi]
48+
indent_size = 2
49+
50+
[*.ncl]
51+
indent_size = 2
52+
53+
[*.rkt]
54+
indent_size = 2
55+
56+
[*.scm]
57+
indent_size = 2
58+
59+
[*.nix]
60+
indent_size = 2
61+
62+
[Justfile]
63+
indent_style = space
64+
indent_size = 4
65+

deno/.envrc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Activate development environment
3+
# Install direnv: https://direnv.net/
4+
5+
# Load .tool-versions if asdf is available
6+
if has asdf; then
7+
use asdf
8+
fi
9+
10+
# Load Guix shell if guix.scm exists
11+
if has guix && [ -f guix.scm ]; then
12+
use guix
13+
fi
14+
15+
# Load Nix flake if flake.nix exists
16+
if has nix && [ -f flake.nix ]; then
17+
use flake
18+
fi
19+
20+
# Project environment variables
21+
export PROJECT_NAME="{{PROJECT_NAME}}"
22+
export RSR_TIER="infrastructure"
23+
# export DATABASE_URL="..."
24+
# export API_KEY="..."
25+
26+
# Source .env if it exists (gitignored)
27+
dotenv_if_exists

deno/.guix-channel

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
;; SPDX-License-Identifier: MPL-2.0
2+
;; Copyright (c) {{CURRENT_YEAR}} {{AUTHOR}} ({{OWNER}}) <{{AUTHOR_EMAIL}}>
3+
;;
4+
;; Guix channel definition for {{PROJECT_NAME}}
5+
;;
6+
;; To use this channel, add to ~/.config/guix/channels.scm:
7+
;;
8+
;; (channel
9+
;; (name '{{PROJECT_NAME}})
10+
;; (url "https://github.com/{{OWNER}}/{{PROJECT_NAME}}")
11+
;; (branch "main"))
12+
;;
13+
;; Then: guix pull
14+
15+
(channel
16+
(version 0)
17+
(url "https://github.com/{{OWNER}}/{{PROJECT_NAME}}")
18+
(dependencies
19+
(channel
20+
(name 'guix)
21+
(url "https://git.savannah.gnu.org/git/guix.git")
22+
(branch "master"))))

deno/.hypatia-ignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# .hypatia-ignore
3+
4+
cicd_rules/banned_language_file:rescript.json
5+
cicd_rules/banned_language_file:jsr.json
6+
cicd_rules/banned_language_file:deno.json
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
---
3+
### [META]
4+
id: "machine-readable-pillar"
5+
level: 1
6+
parent: "../0-AI-MANIFEST.a2ml"
7+
8+
---
9+
### [AI_MANIFEST]
10+
description: |
11+
Registry for all machine-readable metadata, policies, and internal
12+
automation scripts.
13+
14+
canonical_locations:
15+
state: "STATE.a2ml"
16+
meta: "META.a2ml"
17+
ecosystem: "ECOSYSTEM.a2ml"
18+
agentic: "AGENTIC.a2ml"
19+
neurosym: "NEUROSYM.a2ml"
20+
playbook: "PLAYBOOK.a2ml"
21+
anchors: "anchors/"
22+
policies: "policies/"
23+
ai_configs: "ai/"
24+
compliance: "compliance/"
25+
scripts: "scripts/"
26+
27+
invariants:
28+
- "Metadata files MUST follow a2ml format"
29+
- "Internal automation MUST live in scripts/ subfolder"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
#
4+
# AGENTIC.a2ml — AI agent constraints and capabilities
5+
# Defines what AI agents can and cannot do in this repository.
6+
7+
[metadata]
8+
version = "0.1.0"
9+
last-updated = "2026-04-11"
10+
11+
[agent-permissions]
12+
can-edit-source = true
13+
can-edit-tests = true
14+
can-edit-docs = true
15+
can-edit-config = true
16+
can-create-files = true
17+
18+
[agent-constraints]
19+
# What AI agents must NOT do:
20+
# - Never use banned language patterns (believe_me, unsafeCoerce, etc.)
21+
# - Never commit secrets or credentials
22+
# - Never use banned languages (TypeScript, Python, Go, etc.)
23+
# - Never place state files in repository root (must be in .machine_readable/)
24+
# - Never use AGPL license (use MPL-2.0)
25+
26+
[maintenance-integrity]
27+
fail-closed = true
28+
require-evidence-per-step = true
29+
allow-silent-skip = false
30+
require-rerun-after-fix = true
31+
release-claim-requires-hard-pass = true
32+
33+
[automation-hooks]
34+
# on-enter: Read 0-AI-MANIFEST.a2ml, then STATE.a2ml
35+
# on-exit: Update STATE.a2ml with session outcomes
36+
# on-commit: Run just validate-rsr
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
3+
#
4+
# ECOSYSTEM.a2ml — Project ecosystem position
5+
# Relationships, dependencies, integration points.
6+
7+
[metadata]
8+
version = "0.1.0"
9+
last-updated = "2026-04-11"
10+
11+
[project]
12+
name = "a2ml-deno"
13+
purpose = "" # TODO: describe project purpose
14+
role = "" # TODO: describe project role # e.g. ffi-infrastructure, cli-tool, library, service
15+
16+
[position-in-ecosystem]
17+
tier = "infrastructure" # 1 | 2 | infrastructure
18+
19+
[related-projects]
20+
# relationship types: sibling-standard, dependency, dependent, inspiration, potential-consumer
21+
# - { name = "language-bridges", relationship = "sibling-standard" }
22+
# - { name = "hypatia", relationship = "potential-consumer" }
23+
24+
[integration-points]
25+
# External systems this project connects to
26+
# - { system = "gitbot-fleet", direction = "outbound", protocol = "repository_dispatch" }

0 commit comments

Comments
 (0)