Skip to content

Commit cef9a07

Browse files
committed
chore(machine-readable): populate bot_directives (was a dangling symlink)
The root .bot_directives symlink -> .machine_readable/bot_directives pointed at a missing directory. Create it with README + hypatia/gitbot-fleet/git-private-farm directives grounded in the real workflows + .hypatia bot names (no fabricated endpoints/tokens). https://claude.ai/code/session_013wg3Mtq2QFhYi4XVw1Z6z7
1 parent f67af66 commit cef9a07

4 files changed

Lines changed: 207 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
= Bot Directives
4+
:toc: preamble
5+
:icons: font
6+
7+
Fleet-specific directives for the automation bots that operate on this
8+
repository. These files declare *what each bot is allowed and expected to do
9+
here* — they are the per-repo constraint surface for the hyperpolymath
10+
automation fleet.
11+
12+
The repository root exposes this directory through the `.bot_directives`
13+
symlink (`.bot_directives` → `.machine_readable/bot_directives`).
14+
15+
[NOTE]
16+
====
17+
These directives are *declarative constraint stubs*. They name the hook and its
18+
purpose and set repo-local policy; they intentionally contain *no endpoints,
19+
credentials, or tokens*. Concrete bot configuration (URLs, secrets, schedules)
20+
is supplied by the fleet's own infrastructure, not committed here.
21+
====
22+
23+
== Relationship to other agent files
24+
25+
(See `.machine_readable/agent_instructions/README.adoc`.)
26+
27+
* `AGENTIC.a2ml` — WHAT agents can do (permissions, gating).
28+
* `agent_instructions/` — HOW agents should work (methodology).
29+
* `bot_directives/` — what the *gitbot-fleet and automation bots* do here
30+
(this directory).
31+
* `CLAUDE.md` — how Claude specifically should work (Claude-specific).
32+
33+
== Files
34+
35+
[cols="1,3", options="header"]
36+
|===
37+
| File | Bot / fleet
38+
39+
| `hypatia.a2ml`
40+
| Hypatia neurosymbolic security scanner (the `hypatia-scan` CI gate and the
41+
`hypatia-autofix` bot).
42+
43+
| `gitbot-fleet.a2ml`
44+
| The estate gitbot / agent fleet that operates across repositories.
45+
46+
| `git-private-farm.a2ml`
47+
| The private mirror / build farm that propagates and builds the repository.
48+
|===
49+
50+
== Invariants binding on every bot
51+
52+
* Honour the Hyperpolymath Standard language policy (no banned languages).
53+
* Never introduce proof / unsafe escape hatches (`believe_me`, `assert_total`,
54+
`sorry`, `Admitted`, `unsafeCoerce`, `Obj.magic`).
55+
* Never weaken the consent / affine-safety guarantees the type checker enforces.
56+
* Keep machine-readable files under `.machine_readable/` only.
57+
* Preserve SPDX `MPL-2.0` headers on all files.
58+
* Open changes as reviewable pull requests; do not force-push to the default
59+
branch.
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
#
4+
# git-private-farm.a2ml — directive for the private mirror / build farm on this
5+
# repository. The farm mirrors the repository to estate-private infrastructure
6+
# and runs reproducible builds there.
7+
8+
[metadata]
9+
bot = "git-private-farm"
10+
project = "wokelang"
11+
version = "0.1.0"
12+
last-updated = "2026-06-12"
13+
14+
[hook]
15+
# The farm is driven by the mirror / sync / publish workflows.
16+
related-workflows = [
17+
".github/workflows/mirror.yml", # mirror the repository
18+
".github/workflows/instant-sync.yml", # propagate changes on push
19+
".github/workflows/ghcr-publish.yml", # publish the container image
20+
".github/workflows/boj-build.yml", # SSG / publish build (boj-server trigger)
21+
]
22+
build-tooling = ["cargo", "dune", "podman"] # Rust + OCaml + container builds
23+
24+
[purpose]
25+
summary = "Private mirroring and reproducible builds of the repository."
26+
responsibilities = [
27+
"mirror the public repository to estate-private hosting",
28+
"run reproducible builds (Guix primary, Nix fallback) of the toolchain",
29+
"build and publish the container image (Containerfile / stapeln.toml)",
30+
"keep the private mirror in sync with the default branch",
31+
]
32+
33+
[direction]
34+
# The farm consumes this repo; it does not write source changes back.
35+
flow = "outbound-mirror" # public repo -> private farm
36+
writes-back-to-public = false
37+
38+
[constraints]
39+
reproducible-builds = true # guix.scm primary; flake.nix fallback
40+
preserve-spdx-headers = true
41+
no-secrets-in-image = true # no credentials baked into published images
42+
sha-pinned-dependencies = true
43+
https-only = true
44+
45+
[notes]
46+
# Private endpoints, registry coordinates, and credentials live in the farm
47+
# infrastructure, NOT in this file. This directive only declares repo-local
48+
# scope and the build/mirror policy the farm must honour.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
#
4+
# gitbot-fleet.a2ml — directive for the hyperpolymath gitbot / agent fleet on
5+
# this repository. The fleet is the estate's automation that operates across
6+
# repositories (housekeeping, governance sync, dependency hygiene, label and
7+
# issue triage).
8+
9+
[metadata]
10+
bot = "gitbot-fleet"
11+
project = "wokelang"
12+
version = "0.1.0"
13+
last-updated = "2026-06-12"
14+
15+
[hook]
16+
# The fleet acts through pull requests and issue actions on this repo.
17+
mechanism = "pull-request"
18+
governance-upstream = "hyperpolymath/standards" # reusable workflows + policy
19+
related-workflows = [
20+
".github/workflows/governance.yml",
21+
".github/workflows/workflow-linter.yml",
22+
]
23+
24+
[purpose]
25+
summary = "Cross-repository automation and governance synchronisation."
26+
responsibilities = [
27+
"keep CI thin-wrapper reusables in sync with hyperpolymath/standards",
28+
"repository hygiene (stale references, empty files, formatting)",
29+
"issue / label triage and cross-repo coordination",
30+
"open maintenance PRs (never direct pushes to the default branch)",
31+
]
32+
33+
[permissions]
34+
can-open-pull-requests = true
35+
can-comment-on-issues = true
36+
can-push-to-default-branch = false
37+
can-edit-source = false # source changes go through human-reviewed PRs
38+
can-edit-machine-readable = false # .machine_readable/ is maintainer-curated
39+
40+
[constraints]
41+
respect-language-policy = true # Hyperpolymath Standard allowed/banned set
42+
respect-contractiles = true # must / trust / dust / bust
43+
require-dogfood-gate-green = true # changes must keep the dogfooding gate passing
44+
preserve-spdx-headers = true
45+
no-secrets-in-commits = true
46+
47+
[notes]
48+
# Fleet identity, tokens, and scheduling are managed by the fleet infrastructure
49+
# and are NOT committed here. This file is the repo-local scope/policy surface.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Copyright (c) 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
3+
#
4+
# hypatia.a2ml — directive for the Hypatia security bot on this repository.
5+
# Hypatia is the estate's neurosymbolic security scanner. It runs as the
6+
# `hypatia-scan` CI gate and the `hypatia-autofix` bot.
7+
8+
[metadata]
9+
bot = "hypatia"
10+
project = "wokelang"
11+
version = "0.1.0"
12+
last-updated = "2026-06-12"
13+
14+
[hook]
15+
# CI gate workflow that invokes Hypatia.
16+
ci-workflow = ".github/workflows/hypatia-scan.yml"
17+
# Local activity ledger Hypatia writes to (see repo root).
18+
activity-log = ".hypatia/activity.jsonl"
19+
last-visit = ".hypatia/last-visit.json"
20+
agents = ["hypatia-scan", "hypatia-autofix"]
21+
22+
[purpose]
23+
summary = "Symbolic / neurosymbolic security scanning of the repository."
24+
scans = [
25+
"banned-language patterns (Hyperpolymath Standard policy)",
26+
"dangerous / unsafe usage in Rust",
27+
"proof escape hatches (believe_me, assert_total, sorry, Admitted, unsafeCoerce, Obj.magic)",
28+
"secret / credential leakage (complements secret-scanner)",
29+
]
30+
31+
[autofix-policy]
32+
# hypatia-autofix may propose fixes, but only within these bounds.
33+
mode = "propose" # propose | apply
34+
allow-source-edits = false # never silently edit src/ — open a PR instead
35+
open-pull-request = true
36+
require-human-review = true
37+
never-touch = [
38+
".machine_readable/", # machine state is maintainer-curated
39+
"LICENSE", "NOTICE", "LICENSES/",
40+
]
41+
42+
[constraints]
43+
# Hard invariants Hypatia must not violate.
44+
must-not-weaken-consent-safety = true
45+
must-not-add-escape-hatches = true
46+
must-preserve-spdx-headers = true
47+
fail-closed = true # a scan error blocks, it does not pass silently
48+
49+
[notes]
50+
# Endpoints and credentials are supplied by the Hypatia service, not committed here.
51+
# This directive only declares repo-local scope and policy.

0 commit comments

Comments
 (0)