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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,22 @@

## Machine-Readable Artefacts

The following files in `.machine_readable/` contain structured project metadata:

- `STATE.scm` - Current project state and progress
- `META.scm` - Architecture decisions and development practices
- `ECOSYSTEM.scm` - Position in the ecosystem and related projects
- `AGENTIC.scm` - AI agent interaction patterns
- `NEUROSYM.scm` - Neurosymbolic integration config
- `PLAYBOOK.scm` - Operational runbook
The following files in `.machine_readable/6a2/` contain structured project
metadata (migrated from root `*.scm` to `*.a2ml` on 2026-04-11):

- `6a2/STATE.a2ml` - Current project state and progress
- `6a2/META.a2ml` - Architecture decisions and development practices
- `6a2/ECOSYSTEM.a2ml` - Position in the ecosystem and related projects
- `6a2/AGENTIC.a2ml` - AI agent interaction patterns
- `6a2/NEUROSYM.a2ml` - Neurosymbolic integration config
- `6a2/PLAYBOOK.a2ml` - Operational runbook
- `6a2/0-AI-MANIFEST.a2ml` - Read-first AI manifest (estate standard)

Governance & contractiles: `.machine_readable/contractiles/` (flat:
Adjust/Bust/Dust/Intent/Must/Trust `.a2ml` + `Justfile`),
`.machine_readable/bot_directives/` (hypatia / gitbot-fleet /
git-private-farm trio + per-bot files), `.machine_readable/self-validating/`
(k9 validators). Root `ANCHOR.scm` is the upstream-canonical anchor.

---

Expand All @@ -90,7 +98,7 @@ The following files in `.machine_readable/` contain structured project metadata:
| **Bash/POSIX Shell** | Scripts, automation | Keep minimal |
| **JavaScript** | Only where AffineScript cannot | MCP protocol glue, Deno APIs |
| **Nickel** | Configuration language | For complex configs |
| **Guile Scheme** | State/meta files | STATE.scm, META.scm, ECOSYSTEM.scm |
| **Guile Scheme** | State/meta & anchor files | ANCHOR.scm, formal/coq/manifest.scm; 6a2 metadata lives in .machine_readable/6a2/*.a2ml |
| **Julia** | Batch scripts, data processing | Per RSR |
| **OCaml** | AffineScript compiler | Language-specific |
| **Ada** | Safety-critical systems | Where required |
Expand Down
34 changes: 34 additions & 0 deletions .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 .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Bug report
about: Create a report to help us improve
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/documentation.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Documentation
about: Report unclear, missing, or incorrect documentation
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Feature request
about: Suggest an idea for this project
Expand Down
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/question.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<!--
SPDX-License-Identifier: MPL-2.0
Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
---
name: Question
about: Ask a question about usage or behaviour
Expand Down
6 changes: 6 additions & 0 deletions .github/copilot/coding-agent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
mcp_servers:
boj-server:
command: npx
args: ["-y", "@hyperpolymath/boj-server@latest"]
env:
BOJ_URL: http://localhost:7700
22 changes: 22 additions & 0 deletions .machine_readable/6a2/0-AI-MANIFEST.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# AI Manifest for 6a2 Directory

## Purpose

This manifest declares the AI-assistant context for the 6a2 machine-readable metadata directory.

## Canonical Locations

The 6 core A2ML files MUST exist in this directory:
1. AGENTIC.a2ml
2. ECOSYSTEM.a2ml
3. META.a2ml
4. NEUROSYM.a2ml
5. PLAYBOOK.a2ml
6. STATE.a2ml

## Invariants

- No duplicate files in root directory
- Single source of truth: this directory is authoritative
- No stale metadata

20 changes: 20 additions & 0 deletions .machine_readable/6a2/README.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
# A2ML 6a2 Directory

This directory contains the 6 core A2ML machine-readable metadata files for this repository.

## Files

- `AGENTIC.a2ml` - AI agent operational gating, safety controls
- `ECOSYSTEM.a2ml` - Project ecosystem position, relationships, explicit boundaries
- `META.a2ml` - Architecture decisions (ADRs), development practices, design rationale
- `NEUROSYM.a2ml` - Symbolic semantics, composition algebra
- `PLAYBOOK.a2ml` - Executable plans, operational runbooks
- `STATE.a2ml` - Project state, phase, milestones, session history

## Standards Compliance

These files follow the A2ML Format Family specification from:
https://github.com/hyperpolymath/standards/tree/main/a2ml

47 changes: 35 additions & 12 deletions .machine_readable/6a2/STATE.a2ml
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,64 @@
# STATE.a2ml — Eclexia project state
[metadata]
project = "eclexia"
version = "1.0"
last-updated = "2026-02-12"
version = "1.1"
last-updated = "2026-06-13"
status = "active"
session = "converted from scheme — 2026-04-11"
session = "2026-06-13 estate-standardization + Echo currency checkpoint"

[project-context]
name = "Eclexia"
purpose = """Economics-as-Code with shadow pricing and dimensional analysis"""
completion-percentage = 75
purpose = """Economics-as-Code: a resource-typed language with shadow pricing and
dimensional analysis, where what you give up is priced. Structured information
loss is now first-class: the Echo[A,B] type former retains a collapsed fibre's
witness, and erasing it is priced in the same currency as energy/time/carbon via
Landauer's principle."""
completion-percentage = 77

[position]
phase = "alpha — all SONNET-TASKS complete" # design | implementation | testing | maintenance | archived
phase = "alpha — all SONNET-TASKS complete; Echo integrated into the resource economy"
maturity = "experimental" # experimental | alpha | beta | production | lts

[build-snapshot]
crates = 25
tests = "519 (lib + 32/32 valid + 19/19 invalid conformance, + echo_landauer.ecl)"
clippy = "zero warnings"
unsafe-blocks = "28 (all FFI)"
production-unwraps = 20
formal-verification = "Coq: Typing.v (0 admitted), Echo.v (soundness), EchoThermo.v (axiom-free, Print Assumptions clean), ShadowPrices.v (0 admitted, 5 documented LP axioms); Agda: ResourceTracking.agda"

[route-to-mvp]
milestones = [
# No milestones recorded
"LANDED 2026-06-05: Echo[A,B] structured-loss type former + echo/echo_witness/echo_base builtins (#32)",
"LANDED 2026-06-05: Coq soundness A ≃ Σ(y:B). Echo f y (formal/coq/src/Echo.v)",
"LANDED 2026-06-05: Landauer resource bridge — landauer_cost(states,T) : Resource[Energy]; EchoThermo.v (bennett_reversible_is_free, free_iff_reversible, irreversible_costs_at_least_one_bit, erasure_monotone); THEORY.md §5.5 graded comonad of structured loss",
"LANDED 2026-06-13: governance + .machine_readable standardized to the 06-12 estate standard (flat contractiles, self-validating/, bot_directives trio)",
]

[blockers-and-issues]
issues = [
# No blockers recorded
# Honest 'Known Gaps' (CLAUDE.md) — tracked as GitHub issues at this checkpoint:
"WASM: bump allocator defined but not wired (no GC in linear memory)",
"LLVM: rt-native static library exists, automatic linking not wired",
"Runtime metrics not wired to real OS metrics (except RSS on Linux)",
"Package registry server stub not deployed",
"No measured benchmarks (performance claims are projections)",
]

[critical-next-actions]
actions = [
"Echo follow-ons: functorial echo_map + (graded co)functor laws as conformance tests",
"Echo follow-ons: lift EchoThermo.v discrete shadow toward real-valued k·T·ln2; connect to ShadowPrices.v",
"Wire WASM bump allocator for GC",
"Automate LLVM linking to rt-native static library",
"Wire runtime metrics to real OS metrics",
"Deploy package registry server",
"Complete ShadowPrices.v Admitted proofs",
"Add measured benchmarks",
"Wire reactive crates (salsa DB, modules) into incremental builds",
]

[standing-decisions]
sd-echo = "Echo is core, not a plugin: it sits in the type system (Echo[A,B]) and the resource economy (landauer_cost). The echo-types ↔ eclexia link is downstream-only application evidence (echo-types docs/bridge-status.md §8); eclexia makes no upstream-correctness claim and vice versa."

[maintenance-status]
last-run-utc = "2026-02-12T00:00:00Z"
last-result = "unknown" # unknown | pass | warn | fail
last-run-utc = "2026-06-13T00:00:00Z"
last-result = "pass" # unknown | pass | warn | fail
50 changes: 50 additions & 0 deletions .machine_readable/bot_directives/README.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// SPDX-License-Identifier: MPL-2.0
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell
= Bot directives — eclexia
:toc:

== Purpose

Per-repo directives for automated agents operating on
`hyperpolymath/eclexia`. These files tell bots what this repository
considers safe, what is forbidden, and which findings are already
adjudicated, so automated runs do not relitigate settled decisions or
touch protected surfaces.

== Precedence

. Maintainer instruction (see `MAINTAINERS.adoc`) — always wins.
. These directives.
. Bot built-in defaults.

== Files

Estate-standard trio (net-new 2026-06-13):

* `hypatia.a2ml` — Hypatia scanner config pointers + pre-adjudicated
finding classes (unsafe-FFI blocks, the documented ShadowPrices.v
axioms, audited unwraps), grounded in the repo's `Security` /
`Known Gaps` facts.
* `gitbot-fleet.a2ml` — fleet roster, branch policy, never-touch paths,
per-bot constraints.
* `git-private-farm.a2ml` — `.git-private-farm` propagation contract;
propagation is **live** here (the repo ships
`.github/workflows/instant-sync.yml`).

Repo-specific per-bot files (pre-existing): `rhodibot.a2ml`,
`echidnabot.a2ml`, `sustainabot.a2ml`, `glambot.a2ml`, `seambot.a2ml`,
`finishbot.a2ml`, `robot-repo-automaton.a2ml`, and the legacy
`README.a2ml` (kept for the existing per-bot constraint records).

== Repo-specific ground rules (summary)

* eclexia is the **upstream-canonical anchor** (`ANCHOR.scm` authority =
`upstream-canonical`); semantics live here, satellites consume them.
* Semantic-authority surfaces are bot-off-limits: `THEORY.md`,
`SPECIFICATION.md`, `PROOFS.md`, `formal/coq/src/`, `formal/agda/`,
`.claude/CLAUDE.md`, `ANCHOR.scm`.
* The Coq trusted base (`Typing.v`, `Echo.v`, `EchoThermo.v`) is
axiom-free; `ShadowPrices.v`'s five axioms are documented LP-theory
axioms, not debt.
* CI green precedes merge; bots never auto-merge and never delete
branches. Escalation channel is an issue, not PR-comment spam.
33 changes: 33 additions & 0 deletions .machine_readable/bot_directives/git-private-farm.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# SPDX-License-Identifier: MPL-2.0
# git-private-farm.a2ml — .git-private-farm propagation directives for
# eclexia. Net-new at the 2026-06-13 governance checkpoint per the estate
# bot_directives standard. Values below are read from the live workflow
# .github/workflows/instant-sync.yml (secret NAME only; no token values).

[metadata]
repo = "eclexia"
last-updated = "2026-06-13"
owner = "hyperpolymath"

[propagation]
enabled = true
# eclexia HAS .github/workflows/instant-sync.yml (unlike echo-types), so
# propagation is LIVE. The keys below mirror that workflow exactly.
workflow = ".github/workflows/instant-sync.yml"
action = "peter-evans/repository-dispatch@v4.0.1" # SHA-pinned in the workflow
target = "hyperpolymath/.git-private-farm"
event-type = "propagate"
secret-name = "FARM_DISPATCH_TOKEN" # secret NAME only; value lives in repo secrets
presence-gated = true # gated on the workflow's own trigger conditions

[never-propagate]
items = [
"secrets",
"unmerged branches",
"work-in-progress",
"session/* and claude/* working branches",
]

[on-token-rotation]
command = "gh secret set FARM_DISPATCH_TOKEN --repo hyperpolymath/eclexia" # name only; paste the new value when prompted
note = "If propagation breaks after a rotation, the symptom is a silent no-op dispatch; check the instant-sync run logs, not eclexia's build."
68 changes: 68 additions & 0 deletions .machine_readable/bot_directives/gitbot-fleet.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# SPDX-License-Identifier: MPL-2.0
# gitbot-fleet.a2ml — gitbot fleet directives for eclexia.
# Net-new at the 2026-06-13 governance checkpoint per the estate
# bot_directives standard. Fleet roster taken from the repo's existing
# per-bot directive files (.machine_readable/bot_directives/*.a2ml).

[metadata]
repo = "eclexia"
last-updated = "2026-06-13"
owner = "hyperpolymath"

[fleet]
bots = ["rhodibot", "echidnabot", "sustainabot", "glambot", "seambot", "finishbot", "robot-repo-automaton"]

[fleet.roles]
rhodibot = "git operations"
echidnabot = "code quality"
sustainabot = "dependency updates"
glambot = "documentation"
seambot = "integration"
finishbot = "task completion"
robot-repo-automaton = "repo automation / scaffolding"

[branch-policy]
working-branch-pattern = "<bot>/<topic>" # human sessions use claude/<slug> or session/<topic>; bots use their own prefix
draft-PRs-only = true
ci-green-before-merge = true
never-touch = [
".claude/CLAUDE.md",
"ANCHOR.scm",
"formal/coq/src/", # Coq metatheory: Typing.v, Echo.v, EchoThermo.v are axiom-free — do not edit mechanically
"formal/agda/", # ResourceTracking.agda
"THEORY.md", # semantic authority (ANCHOR.scm semantic-authority.type-theory)
"SPECIFICATION.md", # semantic authority (language spec)
"PROOFS.md",
".github/workflows/", # CI hardening is review-gated, not bot-edited
]

# ============================================================
# Per-bot constraints where eclexia gives a specific reason;
# defaults apply otherwise.
# ============================================================

[per-bot.rhodibot]
deny = ["force-push to main", "branch deletion", "history rewrites on main"]
note = "main is protected; superseded work is git-revert'd, not rewritten. A bot may force-with-lease ONLY its own session branch."

[per-bot.echidnabot]
deny = ["editing formal/coq proofs", "introducing Coq axioms outside ShadowPrices.v", "adding production unwraps on fallible paths", "weakening clippy to silence warnings"]
note = "Quality gate = cargo build --workspace + cargo test --workspace (519 tests) + cargo clippy (zero warnings) + verify-coq-proofs.yml. The Coq trusted base (Typing.v/Echo.v/EchoThermo.v) is axiom-free; ShadowPrices.v's 5 axioms are documented LP-theory axioms (see hypatia.a2ml)."

[per-bot.sustainabot]
allow = ["cargo group bumps via dependabot (precedent: PRs #29, #33)", "GitHub Actions group bumps"]
deny = ["bumping the coqc / Rust toolchain pins without a green verify-coq-proofs + full cargo test run"]
note = "dependabot-automerge.yml exists; the workspace test suite + coq verification are the compatibility gate."

[per-bot.glambot]
deny = ["redefining language semantics in docs", "contradicting THEORY.md / SPECIFICATION.md"]
note = "Docs are Markdown/AsciiDoc. Echo is now core (Echo[A,B] type former + landauer_cost resource bridge, THEORY.md §5.5); keep STATE/META/ECOSYSTEM currency honest (Landed/Partial/Open). README.md is canonical; EXPLAINME is the plain-language pointer."

[per-bot.seambot]
note = "eclexia is the upstream-canonical anchor (ANCHOR.scm authority = upstream-canonical); satellite repos (eclexia-playground/-vscode/-docs) consume, they do not redefine. The echo-types ↔ eclexia thermodynamic bridge is recorded downstream-only (echo-types docs/bridge-status.md §8); do not widen it into a cross-repo correctness claim."

[per-bot.finishbot]
note = "Task completion respects honest scoping: 'Known Gaps' in CLAUDE.md (WASM GC, automatic LLVM linking, OS metrics, registry deploy, measured benchmarks) are tracked as issues, never silently marked done."

[per-bot.robot-repo-automaton]
note = "Scaffolding/standardisation follows the rsr-template-repo standard AS OBSERVED in the estate (flat contractiles, self-validating/, bot_directives/), NOT the template's stale Mustfile (which still checks the old nested layout — see Mustfile.a2ml header). Report template drift via issue."
Loading
Loading