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
13 changes: 8 additions & 5 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ body:
value: |
Please report what you **observed**, not what you inferred. A command and
its actual output is worth more than a description of the problem.

All fields below use the same plain text area and are **optional**:
answer what is relevant, skip what is not. The only hard gate is the
attestation pair at the end.
- type: textarea
id: what-happened
attributes:
Expand All @@ -17,29 +21,28 @@ body:
placeholder: |
$ just verify
error: ...
render: shell
validations:
required: true
required: false
- type: textarea
id: expected
attributes:
label: What you expected instead
validations:
required: true
required: false
- type: textarea
id: repro
attributes:
label: Minimal reproduction
description: The shortest sequence that reproduces it from a clean checkout.
validations:
required: true
required: false
- type: input
id: version
attributes:
label: Version / commit
description: Output of `git rev-parse --short HEAD`.
validations:
required: true
required: false
- type: textarea
id: environment
attributes:
Expand Down
11 changes: 8 additions & 3 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,24 @@ name: Feature request
description: Propose a capability this project does not yet have.
labels: ["enhancement", "needs-triage"]
body:
- type: markdown
attributes:
value: |
All fields below are **optional** — answer what is relevant, skip the
rest. A short, concrete problem statement beats a long speculative one.
- type: textarea
id: problem
attributes:
label: The problem
description: What are you unable to do today? Describe the situation, not the solution.
validations:
required: true
required: false
- type: textarea
id: proposal
attributes:
label: Proposed change
validations:
required: true
required: false
- type: textarea
id: alternatives
attributes:
Expand All @@ -34,4 +39,4 @@ body:
- Template-wide — would propagate to minted repos
- Not sure
validations:
required: true
required: false
22 changes: 22 additions & 0 deletions .github/SUPPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!--
SPDX-License-Identifier: CC-BY-SA-4.0
SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
-->
# Support

* **Bug reports and feature requests** — open an
[issue](https://github.com/hyperpolymath/aerie/issues/new/choose). All
form fields are optional; the only hard gate is the attestation pair.
* **Questions and how-do-I** — use
[Discussions](https://github.com/hyperpolymath/aerie/discussions)
(Q&A category). Questions as issues are triaged there.
* **Security vulnerabilities** — do **not** open a public issue. Report
privately via a
[security advisory](https://github.com/hyperpolymath/aerie/security/advisories/new);
see [SECURITY.md](../SECURITY.md) for scope and response times.
* **Setup trouble** — `./setup.sh` is the zero-prerequisite path (needs
only git + curl); `just doctor` diagnoses the toolchain. Docs:
[docs/SETUP.adoc](../docs/SETUP.adoc).

Response times are best-effort; see
[GOVERNANCE.md](../GOVERNANCE.md) for maintainer responsibilities.
27 changes: 27 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ https://github.com/hyperpolymath/aerie/pulls[hyperpolymath/aerie].
* `tests/idris2/` — proven-tests-format Idris2 suite scaffold.
* `docs/REPO-SETTINGS.adoc`, `docs/wiki-plan.adoc`,
`docs/reports/quality/REMEDIATION-PLAN.md`, `docs/SETUP.adoc`.
* `docs/ESTATE-PROPAGATION.adoc` — owner runbook: rolling the fixed
issue forms and check-suite health verification across the
hyperpolymath and metadatastician estates (layers: estate `.github`
defaults, per-repo PRs, template-source fix, startup-failure sweep).
* `scripts/propagate-github-templates.sh` — gh-driven per-repo PR
rollout of the canonical issue forms across both estates.
* Conventional dotfiles: `.envrc`, `.mailmap`, `.gitleaksignore`,
`.cicd-hygiene-allow`, `.hypatia-ignore`, `.tool-versions`.

Expand All @@ -43,6 +49,20 @@ https://github.com/hyperpolymath/aerie/pulls[hyperpolymath/aerie].
* `Justfile` — canonical verbs added: `setup`, `build`, `test`, `bench`,
`format`, `clean`, `release`, `install`, `guix-shell`, `container-build`,
`man`, `cookbook`.
* `setup.sh` — rewritten as the guaranteed zero-prerequisite path
(issue #91): with only bash + curl it installs `just` and the pinned
Zig toolchain (checksum-verified from the ziglang.org release index)
into a user-local dir — no sudo — then runs `just doctor`. Safe to
re-run; cargo/brew/mise remain fallbacks, not requirements.
* `Justfile` — `setup` no longer gates `heal` behind a passing `doctor`
(a failing doctor would abort before the repair could run); both
`setup` and `heal` delegate to `./setup.sh`; `doctor` now requires
Zig 0.15.2 (matching `build.zig`/mise pins; was 0.13) and lists podman
as an optional warning.
* `README.md`, `QUICKSTART-DEV.adoc`, `QUICKSTART-USER.adoc`,
`docs/SETUP.adoc` — the zero-prerequisite route (Approach 3) is now
named explicitly and recommended first; the AI-assisted prompt starts
from `./setup.sh` instead of assuming `just` is already present.
* `CHANGELOG.md` → `CHANGELOG.adoc` (estate documentation format).
* `ARCHITECTURE.md` — rewritten from scaffold filler to the actual
architecture law and layout.
Expand All @@ -57,6 +77,13 @@ https://github.com/hyperpolymath/aerie/pulls[hyperpolymath/aerie].
(`src/api/v/`), not "zig"; the comment contradicted the law it quoted.
* `.claude/CLAUDE.md` — "Never Zig, Rust, or C" self-contradiction (Zig IS the
API language) and the "Zig (src/api/v/)" mislabel corrected.
* `.github/ISSUE_TEMPLATE/bug_report.yml` (issue #92) — the
"What happened" field no longer renders differently from its
neighbours (`render: shell` removed; all free-text fields are the same
plain textarea), and no content field is required any more — only the
two attestation checkboxes still gate submission.
`feature_request.yml` relaxed the same way, so irrelevant fields can
simply be left blank on both forms.

=== Added

Expand Down
39 changes: 22 additions & 17 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ import? "contractile.just"
# CANONICAL VERBS (estate Justfile specification)
# ═══════════════════════════════════════════════════════════════════

# First-time setup: toolchain check + repair
setup: doctor
just heal
# First-time setup: install anything missing, then verify the toolchain.
# Delegates to the zero-prerequisite bootstrap (needs only bash + curl);
# deliberately NOT 'doctor then heal' — a failing doctor would abort the
# recipe before heal ever ran.
setup:
@./setup.sh

# Build the gateway (debug)
build:
Expand Down Expand Up @@ -170,9 +173,9 @@ doctor:
FAIL=$((FAIL + 1))
fi
}
check "just" just "1.25"
check "git" git "2.40"
check "Zig" zig "0.13"
check "just" just "1.25"
check "git" git "2.40"
check "Zig" zig "0.15.2"
# Optional tools
if command -v panic-attack >/dev/null 2>&1; then
echo " [OK] panic-attack — available"
Expand All @@ -181,6 +184,13 @@ doctor:
echo " [WARN] panic-attack — not found (pre-commit scanner)"
WARN=$((WARN + 1))
fi
if command -v podman >/dev/null 2>&1; then
echo " [OK] podman — available (containerised stack)"
PASS=$((PASS + 1))
else
echo " [WARN] podman — not found (only needed for 'podman compose up')"
WARN=$((WARN + 1))
fi
echo ""
echo " Result: $PASS passed, $FAIL failed, $WARN warnings"
if [ "$FAIL" -gt 0 ]; then
Expand All @@ -190,18 +200,13 @@ doctor:
echo " All required tools present."

# Attempt to automatically install missing tools
# Delegates to the same zero-prerequisite bootstrap as first-time setup:
# curl-only downloads of `just` (via setup.sh) and the pinned Zig toolchain,
# followed by `just doctor` to verify. (Note: heal can only run when just
# is already present — fresh clones should run ./setup.sh directly.)
heal:
#!/usr/bin/env bash
echo "═══════════════════════════════════════════════════"
echo " Aerie Heal — Automatic Tool Installation"
echo "═══════════════════════════════════════════════════"
echo ""
if ! command -v just >/dev/null 2>&1; then
echo "Installing just..."
cargo install just 2>/dev/null || echo "Install just from https://just.systems"
fi
echo ""
echo "Heal complete. Run 'just doctor' to verify."
@echo "=== Heal === (delegating to ./setup.sh — the zero-prerequisite bootstrap)"
@./setup.sh

# Guided tour of the project structure and key concepts
tour:
Expand Down
11 changes: 6 additions & 5 deletions QUICKSTART-DEV.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@ Clone, build, test, contribute.

== Prerequisites

* Git 2.40+
* just (command runner)
* See `just doctor` output for language-specific requirements
* Git 2.40+ and curl — nothing else; `./setup.sh` installs the rest
* `just doctor` output tells you the language-specific state afterwards

== Setup

[source,bash]
----
git clone https://github.com/hyperpolymath/aerie
cd aerie
just doctor # verify toolchain
just heal # auto-install missing tools
./setup.sh # zero-prerequisite: installs just + pinned Zig (curl only),
# then runs just doctor. Safe to re-run.
just doctor # re-verify the toolchain any time
just heal # re-attempt automatic repair of anything doctor flags
----

== Development Workflow
Expand Down
9 changes: 5 additions & 4 deletions QUICKSTART-USER.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@ Get up and running in 60 seconds.

== Prerequisites

* Git 2.40+
* just (command runner) — https://just.systems
* Git 2.40+ and curl — nothing else; `./setup.sh` installs `just` and
the rest of the toolchain for you (no sudo).

== Install

[source,bash]
----
git clone https://github.com/hyperpolymath/aerie
cd aerie
just doctor # check toolchain
just heal # auto-install missing tools
./setup.sh # installs just + pinned Zig if missing, then checks the
# toolchain with just doctor
just heal # re-attempt automatic repair of anything doctor flagged
----

== First Run
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ Four ways in — full detail in [`docs/SETUP.adoc`](docs/SETUP.adoc):
repository. Use the Justfile as the single entry point.`
2. **Raw** — `git clone` → install Zig 0.15.2+, just, and Podman →
`zig build -Doptimize=ReleaseSafe` → `podman compose -f compose.yml up`.
3. **Just** — `./setup.sh` (installs just if missing), then
`just doctor && just build && just test`.
3. **Just** (zero-prerequisite — start here) — `./setup.sh` needs only
git + curl: it installs `just` and the pinned Zig toolchain itself if
missing, then verifies with `just doctor`. Continue with
`just build && just test`.
4. **Launcher** — `./aerie-launcher.sh` (standards-compliant,
cross-platform, launch-scaffolder generated).

Expand Down
Loading