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
27 changes: 26 additions & 1 deletion .machine_readable/6a2/META.a2ml
Original file line number Diff line number Diff line change
@@ -1,9 +1,34 @@
# SPDX-License-Identifier: MPL-2.0
# META.a2ml — Project meta-information
# Converted from META.scm on 2026-03-15
# Converted from META.scm on 2026-03-15; refreshed 2026-06-13

[metadata]
project = "Axiology.jl"
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>"
license = "MPL-2.0"
standard = "RSR 2026"
last-updated = "2026-06-13"

[repository]
owner = "hyperpolymath"
name = "Axiology.jl"
url = "https://github.com/hyperpolymath/Axiology.jl"
uuid = "868b87ec-ec5d-47a0-ab5f-c8a8ecbd97bd"

[architecture]
primary-language = "Julia 1.9+"
ffi-layer = "Zig (ffi/zig/) — C-ABI boundary for performance-critical metric computation"
abi-layer = "Idris2 (src/abi/) — dependent-type formal proofs of value satisfaction properties (Phase 2+)"
dependencies = ["Statistics (stdlib)", "LinearAlgebra (stdlib)"]
test-dependencies = ["Test (stdlib)"]

[design-decisions]
single-file-core = "src/Axiology.jl is the primary module; src/types.jl, src/fairness.jl, src/welfare.jl, src/optimization.jl are included via include()"
no-ml-framework-dep = "Axiology does not depend on Flux.jl or MLJ.jl in core; users supply model outputs as Dict state"
idris2-abi-rationale = "dependent types prove interface correctness for value satisfaction contracts (see ABI-FFI-README.md)"
zig-ffi-rationale = "zero-cost C ABI compatibility for high-performance metric computation"

[governance]
estate-standard = "06-12"
contractile-layout = "flat (.machine_readable/contractiles/)"
last-estate-update = "2026-06-13"
35 changes: 31 additions & 4 deletions .machine_readable/6a2/STATE.a2ml
Original file line number Diff line number Diff line change
@@ -1,14 +1,41 @@
# SPDX-License-Identifier: MPL-2.0
# STATE.a2ml — Project state checkpoint
# Converted from STATE.scm on 2026-03-15
# Converted from STATE.scm on 2026-03-15; refreshed 2026-06-13

[metadata]
project = "Axiology.jl"
version = "0.1.0"
last-updated = "2026-03-15"
last-updated = "2026-06-13"
status = "active"

[project-context]
name = "Axiology.jl"
completion-percentage = 0
phase = "In development"
completion-percentage = 65
phase = "Alpha — core value system functional, integration APIs planned"
description = "Julia library for value theory in machine learning and automated reasoning systems. Provides value types (Fairness, Welfare, Profit, Efficiency, Safety), satisfaction checking, Pareto frontier analysis, and groundwork for formal verification via Idris2 ABI + Zig FFI."

[build]
language = "Julia"
julia-compat = "1.9+"
test-command = "julia --project=. -e 'using Pkg; Pkg.test()'"
test-baseline = "43/45 tests passing (172 @test expressions across 129 @testsets)"
source-lines = "1088"

[milestones]
landed = [
"value type system: Fairness, Welfare, Profit, Efficiency, Safety",
"satisfy() checking API",
"demographic_parity and disparate_impact fairness metrics",
"multi-objective weighted scoring",
"pareto_frontier() analysis",
"Zig FFI layer (ffi/zig/)",
"Idris2 ABI groundwork (ABI-FFI-README.md, PROOF-NEEDS.md)",
"basic_usage.jl example",
]
open = [
"ML framework bridges (Flux.jl, MLJ.jl)",
"equalized odds fairness metric",
"Idris2 proofs wired into CI (Phase 2+)",
"pareto_frontier scalability beyond O(n^2)",
"src/fairness.jl.backup / *_minimal / *_nodocs cleanup",
]
73 changes: 40 additions & 33 deletions .machine_readable/bot_directives/README.adoc
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
= Agent Instructions
:toc: preamble
= Bot directives — Axiology.jl
:toc:

Methodology-aware configuration for AI agents. Read by any AI agent
(Claude, Gemini, Copilot, etc.) at session start.
== Purpose

== Files

[cols="1,3"]
|===
| File | Purpose

| `methodology.a2ml`
| Default mode, invariants, ring ceiling, priority weights, convergent budget

| `coverage.a2ml`
| Session coverage tracking — what was visited, what was skipped, what has MUSTs
Per-repo directives for automated agents operating on
`hyperpolymath/Axiology.jl`. 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.

| `debt.a2ml`
| Meander debt — things found but not fixed, carried between sessions
|===
== Precedence

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

1. Read `methodology.a2ml` at session start — know mode, invariants, ceiling
2. Read `coverage.a2ml` — know what was visited last time, what was skipped
3. Read `debt.a2ml` — know what's outstanding from previous sessions
4. At session end, update `coverage.a2ml` and `debt.a2ml`

== Relationship to Other Files

* `AGENTIC.a2ml` says WHAT agents can do (permissions, gating)
* `bot_directives/` says HOW agents should work (methodology)
* `bot_directives/` says what the gitbot-fleet does (fleet-specific)
* `CLAUDE.md` says how Claude specifically should work (Claude-specific)

== Reference
== Files

ADR-002 in `standards/agentic-a2ml/docs/ADR-002-methodology-layer.adoc`
Estate-standard trio (net-new 2026-06-13):

* `hypatia.a2ml` — Hypatia scanner config pointers + pre-adjudicated
finding classes (Zig FFI cross-language boundary, acknowledged backup
source files), grounded in `ABI-FFI-README.md` and repo 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` using secret `FARM_DISPATCH_TOKEN`).

Pre-existing methodology files:

* `methodology.a2ml` — default agent mode, invariants, ring ceiling,
priority weights, convergent budget.
* `coverage.a2ml` — session coverage tracking.
* `debt.a2ml` — meander debt carried between sessions.

== Repo-specific ground rules (summary)

* `src/abi/` and `ffi/zig/` are bot-off-limits without explicit approval
(ABI/FFI changes require proof updates — see `ABI-FFI-README.md` and
`PROOF-NEEDS.md`).
* CI green precedes merge; bots never auto-merge and never delete branches.
* Escalation channel is an issue, not PR-comment spam.
* Propagation to `.git-private-farm` is live via `instant-sync.yml`
on push/release events to main.
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
# Axiology.jl. 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 values).

[metadata]
repo = "Axiology.jl"
last-updated = "2026-06-13"
owner = "hyperpolymath"

[propagation]
enabled = true
# Axiology.jl HAS .github/workflows/instant-sync.yml, so propagation is LIVE.
# The keys below mirror that workflow exactly.
workflow = ".github/workflows/instant-sync.yml"
action = "peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697" # SHA-pinned in the workflow (v3)
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 (push/release)

[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/Axiology.jl" # 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."
44 changes: 44 additions & 0 deletions .machine_readable/bot_directives/gitbot-fleet.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# SPDX-License-Identifier: MPL-2.0
# gitbot-fleet.a2ml — gitbot fleet directives for Axiology.jl.
# 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 = "Axiology.jl"
last-updated = "2026-06-13"
owner = "hyperpolymath"

[fleet]
# Existing per-bot files present: coverage.a2ml, debt.a2ml, methodology.a2ml
# (pre-estate agent_instructions content, now under bot_directives).
# No named per-bot fleet files beyond the methodology trio as of 2026-06-13.
bots = ["dependabot", "robot-repo-automaton"]

[fleet.roles]
dependabot = "dependency updates (dependabot.yml present)"
robot-repo-automaton = "repo automation / scaffolding"

[branch-policy]
working-branch-pattern = "<bot>/<topic>" # human sessions use claude/<slug>; bots use their own prefix
draft-PRs-only = true
ci-green-before-merge = true
never-touch = [
"src/abi/", # ABI definitions: changes require proof update
"ffi/zig/", # C-ABI boundary: changes affect all language bindings
".machine_readable/", # checkpoint files: format is specified
".github/workflows/", # CI hardening is review-gated, not bot-edited
"PROOF-NEEDS.md", # formal verification spec
]

# ============================================================
# Per-bot constraints
# ============================================================

[per-bot.dependabot]
allow = ["Julia dependency bumps via dependabot.yml", "GitHub Actions group bumps"]
deny = ["bumping Julia version below 1.9 (Project.toml compat)"]
note = "dependabot-automerge.yml exists; the Julia test suite is the compatibility gate."

[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."
55 changes: 55 additions & 0 deletions .machine_readable/bot_directives/hypatia.a2ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# SPDX-License-Identifier: MPL-2.0
# hypatia.a2ml — Hypatia scanner directives for Axiology.jl.
# Net-new at the 2026-06-13 governance checkpoint per the estate
# bot_directives standard (hypatia / gitbot-fleet / git-private-farm trio).

[metadata]
repo = "Axiology.jl"
last-updated = "2026-06-13"
owner = "hyperpolymath"

[scanner]
workflow = ".github/workflows/hypatia-scan.yml"
ignore-file = ".hypatia-ignore" # ABSENT as of 2026-06-13; created on first real adjudication, each entry carrying a verified rationale

# ============================================================
# Pre-adjudicated finding classes.
#
# These are grounded in documented repo facts (README.adoc, EXPLAINME.adoc,
# ABI-FFI-README.md, PROOF-NEEDS.md); they are NOT live suppressions.
# When the scanner first raises one, materialise it into .hypatia-ignore
# with the EXACT rule-id from the scan output — do not invent rule-ids here.
# ============================================================

[[accepted-findings]]
class = "zig/ffi-unsafe"
path = "ffi/zig/**"
status = "justified"
reason = """
The Zig FFI layer (ffi/zig/src/main.zig, ffi/zig/test/integration_test.zig)
crosses the C-ABI boundary to Julia. Low-level unsafe operations at this
boundary are required and documented in ABI-FFI-README.md. Do not raise
as defects; if a NEW unsafe pattern appears outside ffi/zig/, that IS a
finding.
"""

[[accepted-findings]]
class = "julia/backup-source-files"
path = "src/fairness.jl.backup, src/fairness_minimal.jl, src/fairness_nodocs.jl"
status = "acknowledged-development-artifact"
reason = """
Three fairness.jl variants exist during active development of the fairness
module. These are tracked in version control intentionally. They should be
removed once fairness.jl stabilises; until then they are not security
findings.
"""

# ============================================================
# Prohibited actions
# ============================================================

[prohibited-actions]
auto-delete-branches = false
auto-merge = false
modify-workflows = false # CI hardening goes through review, not bot edits
escalation = "open an issue, do not spam PR comments"
Loading
Loading