Skip to content
Open
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>

### As Applicable

- [ ] `.machine_readable/STATE.a2ml` updated (if project state changed)
- [ ] `.machine_readable/ECOSYSTEM.a2ml` updated (if integrations changed)
- [ ] `.machine_readable/META.a2ml` updated (if architectural decisions changed)
- [ ] `.machine_readable/descriptiles/STATE.a2ml` updated (if project state changed)
- [ ] `.machine_readable/descriptiles/ECOSYSTEM.a2ml` updated (if integrations changed)
- [ ] `.machine_readable/descriptiles/META.a2ml` updated (if architectural decisions changed)
- [ ] Documentation updated for user-facing changes
- [ ] `TOPOLOGY.md` updated (if architecture changed)
- [ ] `CHANGELOG` or release notes updated
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/openssf-compliance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,11 @@ jobs:
exit 1
fi

if [ ! -f ".machine_readable/STATE.a2ml" ]; then
echo "::error::.machine_readable/STATE.a2ml is required"
if [ ! -f ".machine_readable/descriptiles/STATE.a2ml" ]; then
echo "::error::.machine_readable/descriptiles/STATE.a2ml is required"
exit 1
fi
echo ".machine_readable/STATE.a2ml: OK"
echo ".machine_readable/descriptiles/STATE.a2ml: OK"
- name: Check CHANGELOG exists
run: |
if [ ! -f "CHANGELOG.md" ] && [ ! -f "CHANGELOG.adoc" ] && [ ! -f "CHANGES.md" ]; then
Expand All @@ -87,8 +87,8 @@ jobs:
# Collect all required files that exist
for f in SECURITY.md SECURITY.adoc .github/SECURITY.md LICENSE LICENSE.txt \
CONTRIBUTING.md CONTRIBUTING.adoc README.md README.adoc \
.machine_readable/STATE.a2ml .machine_readable/META.a2ml \
.machine_readable/ECOSYSTEM.a2ml CHANGELOG.md CHANGELOG.adoc; do
.machine_readable/descriptiles/STATE.a2ml .machine_readable/descriptiles/META.a2ml \
.machine_readable/descriptiles/ECOSYSTEM.a2ml CHANGELOG.md CHANGELOG.adoc; do
[ -f "$f" ] && REQUIRED_FILES="$REQUIRED_FILES $f"
done

Expand Down
31 changes: 0 additions & 31 deletions .machine_readable/6a2/0-AI-MANIFEST.a2ml

This file was deleted.

30 changes: 0 additions & 30 deletions .machine_readable/6a2/README.adoc

This file was deleted.

21 changes: 0 additions & 21 deletions .machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml

This file was deleted.

25 changes: 0 additions & 25 deletions .machine_readable/6a2/anchor/README.adoc

This file was deleted.

2 changes: 1 addition & 1 deletion .machine_readable/ai/.clinerules
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
# Authoritative source: docs/AI-CONVENTIONS.md

# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/STATE.a2ml.
# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/descriptiles/STATE.a2ml.

# LICENSE
# All original code: MPL-2.0.
Expand Down
2 changes: 1 addition & 1 deletion .machine_readable/ai/.windsurfrules
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
# Authoritative source: docs/AI-CONVENTIONS.md

# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/STATE.a2ml.
# STARTUP: Read 0-AI-MANIFEST.a2ml first, then .machine_readable/descriptiles/STATE.a2ml.

# LICENSE
# All original code: MPL-2.0.
Expand Down
4 changes: 2 additions & 2 deletions .machine_readable/ai/AI.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
- Prefer to keep generated files out of source control, and regenerate them with the documented commands before committing.

## Workflow
1. Inspect `.machine_readable/STATE.a2ml` for blockers and next actions.
2. Respect any constraints listed inside `.machine_readable/AGENTIC.a2ml` when tooling changes are requested.
1. Inspect `.machine_readable/descriptiles/STATE.a2ml` for blockers and next actions.
2. Respect any constraints listed inside `.machine_readable/descriptiles/AGENTIC.a2ml` when tooling changes are requested.
3. After finishing edits, update STATE with your outcomes and commit with a concise, imperative message.

## Delivery Promises
Expand Down
4 changes: 2 additions & 2 deletions .machine_readable/ai/README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ Recommended machine read order:
* `.machine_readable/policies/MAINTENANCE-AXES.a2ml`
* `.machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml`
* `.machine_readable/policies/SOFTWARE-DEVELOPMENT-APPROACH.a2ml`
* `.machine_readable/STATE.a2ml`
* `.machine_readable/META.a2ml`
* `.machine_readable/descriptiles/STATE.a2ml`
* `.machine_readable/descriptiles/META.a2ml`
24 changes: 23 additions & 1 deletion .machine_readable/anchors/README.adoc
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
// SPDX-License-Identifier: CC-BY-SA-4.0
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
= anchors Registry
# A2ML Anchor Directory

This directory contains ANCHOR.a2ml files for project recalibration and scope intervention.

## Files

- `ANCHOR.a2ml` - Project recalibration, scope intervention, canonical authority

## Multiple Versions

Unlike other A2ML files, multiple versions of ANCHOR.a2ml with different dates may exist.
Each version represents a specific recalibration point in the project history.

## Standards Compliance

These files follow the ANCHOR.a2ml specification from:
https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml

## See Also

- [A2ML Repository Template](https://github.com/hyperpolymath/standards/blob/main/A2ML-REPO-TEMPLATE.adoc)
- [Anchor A2ML Spec](https://github.com/hyperpolymath/standards/tree/main/anchor-a2ml)

50 changes: 25 additions & 25 deletions .machine_readable/contractiles/Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ info:
@echo "Version: {{version}}"
@echo "RSR Tier: {{tier}}"
@echo "Recipes: $(just --summary | wc -w)"
@[ -f ".machine_readable/STATE.a2ml" ] && grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/STATE.a2ml | head -1 | xargs -I{} echo "Phase: {}" || true
@[ -f ".machine_readable/descriptiles/STATE.a2ml" ] && grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/descriptiles/STATE.a2ml | head -1 | xargs -I{} echo "Phase: {}" || true

# Run Invariant Path overlay tools for this repository
invariant-path *ARGS:
Expand Down Expand Up @@ -345,7 +345,7 @@ verify-template:
fi

# Check for empty SCM files
for f in .machine_readable/6a2/STATE.a2ml .machine_readable/6a2/META.a2ml .machine_readable/6a2/ECOSYSTEM.a2ml; do
for f in .machine_readable/descriptiles/STATE.a2ml .machine_readable/descriptiles/META.a2ml .machine_readable/descriptiles/ECOSYSTEM.a2ml; do
if [ -f "$f" ] && grep -q '{{'{{'}}' "$f" 2>/dev/null; then
echo "⚠ $f still has template placeholders"
FOUND=1
Expand Down Expand Up @@ -403,10 +403,10 @@ self-assess:
fi
done

if [ -d ".machine_readable/6a2" ]; then
echo " ✓ .machine_readable/6a2/ — KEEP (SCM checkpoint files)"
if [ -d ".machine_readable" ]; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 MEDIUM RISK

The validation check for .machine_readable/ is redundant and fails to signal an error. Update it to verify the existence of .machine_readable/STATE.a2ml instead of just the directory. Ensure that if the file is missing, the FOUND variable is set to 1.

echo " ✓ .machine_readable/ — KEEP (SCM checkpoint files)"
else
echo " ✗ .machine_readable/6a2/ — MISSING (RSR violation!)"
echo " ✗ .machine_readable/ — MISSING (RSR violation!)"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
fi

if [ -d ".github/workflows" ]; then
Expand Down Expand Up @@ -559,9 +559,9 @@ verify:
check_file "LICENSE"
check_either "CONTRIBUTING.md" "CONTRIBUTING.adoc"
check_either "README.adoc" "README.md"
check_file ".machine_readable/STATE.a2ml"
check_file ".machine_readable/META.a2ml"
check_file ".machine_readable/ECOSYSTEM.a2ml"
check_file ".machine_readable/descriptiles/STATE.a2ml"
check_file ".machine_readable/descriptiles/META.a2ml"
check_file ".machine_readable/descriptiles/ECOSYSTEM.a2ml"
check_either "CHANGELOG.md" "CHANGELOG.adoc"

# Check at least 1 workflow exists
Expand Down Expand Up @@ -1051,7 +1051,7 @@ 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/descriptiles/STATE.a2ml .machine_readable/descriptiles/META.a2ml .machine_readable/descriptiles/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
Expand All @@ -1066,15 +1066,15 @@ validate-rsr:
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/descriptiles/META.a2ml" ]; then
grep -q 'axis-1 = "must > intend > like"' .machine_readable/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:axis-1"
grep -q 'axis-2 = "corrective > adaptive > perfective"' .machine_readable/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:axis-2"
grep -q 'axis-3 = "systems > compliance > effects"' .machine_readable/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:axis-3"
grep -q 'scoping-first = true' .machine_readable/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:scoping-first"
grep -q 'idris-unsound-scan = "believe_me/assert_total"' .machine_readable/descriptiles/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/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:audit-focus"
grep -q 'compliance-focus = "seams/compromises/exception register, bounded exceptions, anti-drift checks"' .machine_readable/descriptiles/META.a2ml || MISSING="$MISSING META.a2ml:compliance-focus"
grep -q 'effects-evidence = "benchmark execution/results and maintainer status dialogue/review"' .machine_readable/descriptiles/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/governance/MAINTENANCE-CHECKLIST.adoc"' .machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml || MISSING="$MISSING MAINTENANCE-CHECKLIST.a2ml:source-human"
Expand All @@ -1088,12 +1088,12 @@ validate-rsr:

# Validate STATE.a2ml syntax
validate-state:
@if [ -f ".machine_readable/STATE.a2ml" ]; then \
grep -q '^\[metadata\]' .machine_readable/STATE.a2ml && \
grep -q 'project\s*=' .machine_readable/STATE.a2ml && \
@if [ -f ".machine_readable/descriptiles/STATE.a2ml" ]; then \
grep -q '^\[metadata\]' .machine_readable/descriptiles/STATE.a2ml && \
grep -q 'project\s*=' .machine_readable/descriptiles/STATE.a2ml && \
echo "STATE.a2ml: valid" || echo "STATE.a2ml: INVALID (missing required sections)"; \
else \
echo "No .machine_readable/STATE.a2ml found"; \
echo "No .machine_readable/descriptiles/STATE.a2ml found"; \
fi

# Validate AI installation guide completeness (finishbot pre-release check)
Expand Down Expand Up @@ -1170,14 +1170,14 @@ validate: validate-rsr validate-state validate-ai-install

# Update STATE.a2ml timestamp
state-touch:
@if [ -f ".machine_readable/STATE.a2ml" ]; then \
sed -i 's/last-updated = "[^"]*"/last-updated = "'"$(date +%Y-%m-%d)"'"/' .machine_readable/STATE.a2ml && \
@if [ -f ".machine_readable/descriptiles/STATE.a2ml" ]; then \
sed -i 's/last-updated = "[^"]*"/last-updated = "'"$(date +%Y-%m-%d)"'"/' .machine_readable/descriptiles/STATE.a2ml && \
echo "STATE.a2ml timestamp updated"; \
fi

# Show current phase from STATE.a2ml
state-phase:
@grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/STATE.a2ml 2>/dev/null | head -1 || echo "unknown"
@grep -oP 'phase\s*=\s*"\K[^"]+' .machine_readable/descriptiles/STATE.a2ml 2>/dev/null | head -1 || echo "unknown"

# ═══════════════════════════════════════════════════════════════════════════════
# GUIX & NIX
Expand Down
8 changes: 4 additions & 4 deletions .machine_readable/contractiles/Mustfile.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@ hooks fail if any check fails.
- severity: critical

### six-directory-present
- description: 6a2 directory exists with required files
- run: test -d .machine_readable/6a2 && test -f .machine_readable/6a2/META.a2ml && test -f .machine_readable/6a2/ECOSYSTEM.a2ml && test -f .machine_readable/6a2/STATE.a2ml && test -f .machine_readable/6a2/PLAYBOOK.a2ml && test -f .machine_readable/6a2/AGENTIC.a2ml && test -f .machine_readable/6a2/NEUROSYM.a2ml
- description: core A2ML files exist in .machine_readable/descriptiles/
- run: test -f .machine_readable/descriptiles/META.a2ml && test -f .machine_readable/descriptiles/ECOSYSTEM.a2ml && test -f .machine_readable/descriptiles/STATE.a2ml && test -f .machine_readable/descriptiles/PLAYBOOK.a2ml && test -f .machine_readable/descriptiles/AGENTIC.a2ml && test -f .machine_readable/descriptiles/NEUROSYM.a2ml
- severity: critical

### anchors-directory
- description: anchors directory exists in 6a2
- run: test -d .machine_readable/6a2/anchors
- description: anchors directory exists in .machine_readable/
- run: test -d .machine_readable/anchors
- severity: warning

### self-validating-structure
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ notes = "This repo is a template and is not 'deployed' in the traditional sense.
[incident-response]
steps = [
"1. Read 0-AI-MANIFEST.a2ml for canonical locations.",
"2. Check .machine_readable/6a2/STATE.a2ml for active blockers.",
"2. Check .machine_readable/descriptiles/STATE.a2ml for active blockers.",
"3. Run `just validate-rsr` to check for standards regressions.",
"4. If standards have drifted, consult developer-ecosystem/standards for the source of truth.",
]
Expand Down
2 changes: 1 addition & 1 deletion .machine_readable/policies/MAINTENANCE-AXES.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ machine-entrypoints = [
".machine_readable/policies/MAINTENANCE-AXES.a2ml",
".machine_readable/policies/MAINTENANCE-CHECKLIST.a2ml",
".machine_readable/policies/SOFTWARE-DEVELOPMENT-APPROACH.a2ml",
".machine_readable/META.a2ml",
".machine_readable/descriptiles/META.a2ml",
".machine_readable/ai/README.adoc",
".machine_readable/bot_directives/README.scm",
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ let methodology_guard = {
state_not_template = {
description = "STATE.a2ml must not contain template placeholders",
severity = "warning",
file = ".machine_readable/6a2/STATE.a2ml",
file = ".machine_readable/descriptiles/STATE.a2ml",
reject_patterns = ["{{PLACEHOLDER}}", "Proof Burrower", "rsr-template-repo"],
},

Expand Down
Loading
Loading