Skip to content

Commit 3188ef2

Browse files
Merge branch 'main' into dependabot/cargo/cargo-f6ecf5c85a
2 parents 9c28a5c + ca9f7a2 commit 3188ef2

14 files changed

Lines changed: 446 additions & 1718 deletions

File tree

.github/workflows/mirror.yml

Lines changed: 109 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,144 @@
11
# SPDX-License-Identifier: PMPL-1.0-or-later
22
name: Mirror to GitLab and Bitbucket
3+
name: Mirror to Git Forges
34

45
on:
56
push:
6-
branches: [main, master]
7-
tags:
8-
- 'v*'
7+
branches: [main]
98
workflow_dispatch:
109

1110
permissions: read-all
1211

1312
jobs:
1413
mirror-gitlab:
1514
runs-on: ubuntu-latest
16-
permissions:
17-
contents: read
18-
if: ${{ vars.GITLAB_MIRROR_ENABLED == 'true' }}
19-
15+
if: vars.GITLAB_MIRROR_ENABLED == 'true'
2016
steps:
21-
- name: Checkout
22-
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
17+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2318
with:
2419
fetch-depth: 0
2520

26-
- name: Setup SSH
27-
uses: webfactory/ssh-agent@dc588b651fe13675774614f8e6a936a468676387 # v0.9.0
21+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
2822
with:
2923
ssh-private-key: ${{ secrets.GITLAB_SSH_KEY }}
3024

31-
- name: Add GitLab to known hosts
25+
- name: Mirror to GitLab
3226
run: |
33-
mkdir -p ~/.ssh
3427
ssh-keyscan -t ed25519 gitlab.com >> ~/.ssh/known_hosts
35-
36-
- name: Push to GitLab
37-
env:
38-
REPO_NAME: ${{ github.event.repository.name }}
39-
run: |
40-
git remote add gitlab git@gitlab.com:hyperpolymath/${REPO_NAME}.git || true
41-
git push gitlab HEAD:main --force || git push gitlab HEAD:master --force
42-
git push gitlab --tags --force
28+
git remote add gitlab git@gitlab.com:${{ vars.GITLAB_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }}.git || true
29+
git push --force gitlab main
4330
4431
mirror-bitbucket:
4532
runs-on: ubuntu-latest
46-
permissions:
47-
contents: read
48-
if: ${{ vars.BITBUCKET_MIRROR_ENABLED == 'true' }}
49-
33+
if: vars.BITBUCKET_MIRROR_ENABLED == 'true'
5034
steps:
51-
- name: Checkout
52-
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
35+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
5336
with:
5437
fetch-depth: 0
5538

56-
- name: Setup SSH
57-
uses: webfactory/ssh-agent@dc588b651fe13675774614f8e6a936a468676387 # v0.9.0
39+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
5840
with:
5941
ssh-private-key: ${{ secrets.BITBUCKET_SSH_KEY }}
6042

61-
- name: Add Bitbucket to known hosts
43+
- name: Mirror to Bitbucket
6244
run: |
63-
mkdir -p ~/.ssh
6445
ssh-keyscan -t ed25519 bitbucket.org >> ~/.ssh/known_hosts
46+
git remote add bitbucket git@bitbucket.org:${{ vars.BITBUCKET_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }}.git || true
47+
git push --force bitbucket main
48+
49+
mirror-codeberg:
50+
runs-on: ubuntu-latest
51+
if: vars.CODEBERG_MIRROR_ENABLED == 'true'
52+
steps:
53+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
54+
with:
55+
fetch-depth: 0
56+
57+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
58+
with:
59+
ssh-private-key: ${{ secrets.CODEBERG_SSH_KEY }}
60+
61+
- name: Mirror to Codeberg
62+
run: |
63+
ssh-keyscan -t ed25519 codeberg.org >> ~/.ssh/known_hosts
64+
git remote add codeberg git@codeberg.org:${{ vars.CODEBERG_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }}.git || true
65+
git push --force codeberg main
66+
67+
mirror-sourcehut:
68+
runs-on: ubuntu-latest
69+
if: vars.SOURCEHUT_MIRROR_ENABLED == 'true'
70+
steps:
71+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
72+
with:
73+
fetch-depth: 0
74+
75+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
76+
with:
77+
ssh-private-key: ${{ secrets.SOURCEHUT_SSH_KEY }}
78+
79+
- name: Mirror to SourceHut
80+
run: |
81+
ssh-keyscan -t ed25519 git.sr.ht >> ~/.ssh/known_hosts
82+
git remote add sourcehut git@git.sr.ht:~${{ vars.SOURCEHUT_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }} || true
83+
git push --force sourcehut main
84+
85+
mirror-disroot:
86+
runs-on: ubuntu-latest
87+
if: vars.DISROOT_MIRROR_ENABLED == 'true'
88+
steps:
89+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
90+
with:
91+
fetch-depth: 0
92+
93+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
94+
with:
95+
ssh-private-key: ${{ secrets.DISROOT_SSH_KEY }}
96+
97+
- name: Mirror to Disroot
98+
run: |
99+
ssh-keyscan -t ed25519 git.disroot.org >> ~/.ssh/known_hosts
100+
git remote add disroot git@git.disroot.org:${{ vars.DISROOT_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }}.git || true
101+
git push --force disroot main
102+
103+
mirror-gitea:
104+
runs-on: ubuntu-latest
105+
if: vars.GITEA_MIRROR_ENABLED == 'true'
106+
steps:
107+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
108+
with:
109+
fetch-depth: 0
110+
111+
- uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
112+
with:
113+
ssh-private-key: ${{ secrets.GITEA_SSH_KEY }}
114+
115+
- name: Mirror to Gitea
116+
run: |
117+
ssh-keyscan -t ed25519 ${{ vars.GITEA_HOST }} >> ~/.ssh/known_hosts
118+
git remote add gitea git@${{ vars.GITEA_HOST }}:${{ vars.GITEA_ORG || vars.MIRROR_ORG || github.repository_owner }}/${{ github.event.repository.name }}.git || true
119+
git push --force gitea main
120+
121+
mirror-radicle:
122+
runs-on: ubuntu-latest
123+
if: vars.RADICLE_MIRROR_ENABLED == 'true'
124+
steps:
125+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
126+
with:
127+
fetch-depth: 0
128+
129+
- name: Setup Rust
130+
uses: dtolnay/rust-toolchain@efa25f7f19611383d5b0ccf2d1c8914531636bf9 # stable
131+
with:
132+
toolchain: stable
133+
134+
- name: Install Radicle
135+
run: |
136+
# Install via cargo (safer than curl|sh)
137+
cargo install radicle-cli --locked
138+
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
65139
66-
- name: Push to Bitbucket
67-
env:
68-
REPO_NAME: ${{ github.event.repository.name }}
140+
- name: Mirror to Radicle
69141
run: |
70-
git remote add bitbucket git@bitbucket.org:hyperpolymath/${REPO_NAME}.git || true
71-
git push bitbucket HEAD:main --force || git push bitbucket HEAD:master --force
72-
git push bitbucket --tags --force
142+
echo "${{ secrets.RADICLE_KEY }}" > ~/.radicle/keys/radicle
143+
chmod 600 ~/.radicle/keys/radicle
144+
rad sync --announce || echo "Radicle sync attempted"

0-AI-MANIFEST.a2ml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# ⚠️ STOP - CRITICAL READING REQUIRED
2+
3+
**THIS FILE MUST BE READ FIRST BY ALL AI AGENTS**
4+
5+
## WHAT IS THIS?
6+
7+
This is the AI manifest for **heterogenous-mobile-computing**. It declares:
8+
- Canonical file locations (where things MUST be, and nowhere else)
9+
- Critical invariants (rules that must NEVER be violated)
10+
- Repository structure and organization
11+
12+
## CANONICAL LOCATIONS (UNIVERSAL RULE)
13+
14+
### Machine-Readable Metadata: `.machine_readable/` ONLY
15+
16+
These 6 SCM files MUST exist in `.machine_readable/` directory ONLY:
17+
1. **STATE.scm** - Project state, progress, blockers
18+
2. **META.scm** - Architecture decisions, governance
19+
3. **ECOSYSTEM.scm** - Position in ecosystem, relationships
20+
4. **AGENTIC.scm** - AI agent interaction patterns
21+
5. **NEUROSYM.scm** - Neurosymbolic integration config
22+
6. **PLAYBOOK.scm** - Operational runbook
23+
24+
**CRITICAL:** If ANY of these files exist in the root directory, this is an ERROR.
25+
26+
### Bot Directives: `.bot_directives/` ONLY
27+
28+
Bot-specific instructions for:
29+
- rhodibot - Git operations
30+
- echidnabot - Code quality
31+
- sustainabot - Dependency updates
32+
- glambot - Documentation
33+
- seambot - Integration
34+
- finishbot - Task completion
35+
36+
### Agent Instructions
37+
38+
- `.claude/CLAUDE.md` - Claude-specific patterns (if exists)
39+
- `0-AI-MANIFEST.a2ml` - THIS FILE (universal entry point)
40+
41+
## CORE INVARIANTS
42+
43+
1. **No SCM duplication** - Root must NOT contain STATE.scm, META.scm, etc.
44+
2. **Single source of truth** - `.machine_readable/` is authoritative
45+
3. **No stale metadata** - If root SCMs exist, they are OUT OF DATE
46+
4. **License consistency** - All code PMPL-1.0-or-later unless platform requires MPL-2.0
47+
5. **Author attribution** - Always "Jonathan D.A. Jewell <jonathan.jewell@open.ac.uk>"
48+
49+
## REPOSITORY STRUCTURE
50+
51+
<!-- CUSTOMIZE THIS SECTION FOR YOUR REPO -->
52+
53+
This repo contains:
54+
55+
```
56+
heterogenous-mobile-computing/
57+
├── 0-AI-MANIFEST.a2ml # THIS FILE (start here)
58+
├── README.md # Project overview
59+
├── [your source files] # Main code
60+
├── .machine_readable/ # SCM files (6 files)
61+
│ ├── STATE.scm
62+
│ ├── META.scm
63+
│ ├── ECOSYSTEM.scm
64+
│ ├── AGENTIC.scm
65+
│ ├── NEUROSYM.scm
66+
│ └── PLAYBOOK.scm
67+
└── .bot_directives/ # Bot instructions
68+
```
69+
70+
## SESSION STARTUP CHECKLIST
71+
72+
✅ Read THIS file (0-AI-MANIFEST.a2ml) first
73+
✅ Understand canonical locations (.machine_readable/, .bot_directives/)
74+
✅ Know the invariants (no SCM duplication, etc.)
75+
✅ Check for MCP enforcement (if applicable)
76+
✅ Read `.machine_readable/STATE.scm` for current status
77+
✅ Read `.machine_readable/AGENTIC.scm` for interaction patterns
78+
79+
## LIFECYCLE HOOKS
80+
81+
### on-enter (Session Start)
82+
83+
When starting a new session:
84+
85+
1. Read and acknowledge this manifest
86+
2. Log session start (optional but recommended)
87+
- Format: `[YYYY-MM-DD HH:MM:SS] Session started: [agent-name]`
88+
- Location: `.machine_readable/session-log.txt`
89+
3. Read `.machine_readable/STATE.scm`
90+
4. Check for blockers
91+
5. State understanding of canonical locations
92+
93+
### on-exit (Session End)
94+
95+
When ending a session:
96+
97+
1. Update `.machine_readable/STATE.scm` if changes made
98+
2. Log session end (optional but recommended)
99+
- Format: `[YYYY-MM-DD HH:MM:SS] Session ended: [summary]`
100+
- Location: `.machine_readable/session-log.txt`
101+
3. Document new blockers
102+
4. Summarize outcomes
103+
104+
## ATTESTATION PROOF
105+
106+
After reading this file, demonstrate understanding by stating:
107+
108+
**"I have read the AI manifest. SCM files are located in `.machine_readable/` ONLY, bot directives in `.bot_directives/`, and I will not create duplicate files in the root directory."**
109+
110+
## META
111+
112+
- **Format Version:** 1.0.0
113+
- **Created:** [DATE]
114+
- **Maintained By:** [YOUR-NAME/ORG]
115+
- **License:** PMPL-1.0-or-later
116+
- **Protocol:** https://github.com/hyperpolymath/0-ai-gatekeeper-protocol

ECOSYSTEM.scm

Lines changed: 0 additions & 20 deletions
This file was deleted.

META.scm

Lines changed: 0 additions & 13 deletions
This file was deleted.

README.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,3 +373,8 @@ Dual-licensed under:
373373
---
374374

375375
*Platform-Agnostic • Offline-First • Zero Unsafe • RSR Bronze Compliant*
376+
377+
378+
== Architecture
379+
380+
See link:TOPOLOGY.md[TOPOLOGY.md] for a visual architecture map and completion dashboard.

STATE.scm

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)