Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
d77263b
Merge pull request #41 from VivienCabannes/hardening/repl-stderr-fair…
Deicyde Aug 28, 2026
7e95267
Merge pull request #42 from VivienCabannes/docs/repair-shipped-skill-…
Deicyde Aug 28, 2026
1c91da8
Merge pull request #43 from VivienCabannes/feature/project-inspect-ca…
Deicyde Aug 29, 2026
da69ac6
Merge pull request #44 from VivienCabannes/feature/project-new-atomic
Deicyde Aug 29, 2026
cf55f9b
Merge pull request #45 from VivienCabannes/feature/project-repair-con…
Deicyde Aug 29, 2026
1fd7d57
Merge pull request #46 from VivienCabannes/hardening/lean-integration…
Deicyde Aug 29, 2026
4ec4aed
Merge pull request #47 from VivienCabannes/feature/project-aware-repl…
Deicyde Aug 29, 2026
4d1e0fc
Merge pull request #49 from VivienCabannes/feature/import-keyed-repl-…
Deicyde Aug 30, 2026
59eb293
[autoform] Scale graph and runtime traversal
Deicyde Aug 30, 2026
5f59799
[autoform] Publish rendered sites transactionally
Deicyde Aug 30, 2026
b72cd55
[autoform] Close publication transaction races
Deicyde Aug 30, 2026
48f9d32
[autoform] Bind publication to verified source snapshots
Deicyde Aug 30, 2026
a69a095
[autoform] Fence publication rollback generation
Deicyde Aug 30, 2026
72df56e
[autoform] Make publication commit irreversible
Deicyde Aug 30, 2026
0306e43
[autoform] Retain uncertain publication generations
Deicyde Aug 30, 2026
0dfae05
[autoform] Describe publication commit precisely
Deicyde Aug 30, 2026
9b6ff9c
[autoform] Restore Graph pickles on Python 3.10
Deicyde Aug 30, 2026
983401b
[autoform] Fence collaborative claims by session
Deicyde Aug 30, 2026
cecc56a
[autoform] Close mixed-version claim races
Deicyde Aug 30, 2026
582845d
[autoform] Pin claim clocks and filesystem identity
Deicyde Aug 30, 2026
da68694
[autoform] Harden claim transport and migration
Deicyde Aug 30, 2026
054d973
[autoform] Bind blueprint claims to built artifacts
Deicyde Aug 30, 2026
3988572
[autoform] Verify exact Mathlib package provenance
Deicyde Aug 30, 2026
b585956
[autoform] Verify canonical Mathlib checkout
Deicyde Aug 30, 2026
20f9e66
[autoform] Reject rewritten Mathlib history
Deicyde Aug 30, 2026
807dbb1
[autoform] Expose fenced claim receipts
Deicyde Aug 30, 2026
43dbc92
[autoform] Isolate Mathlib Git inspection
Deicyde Aug 31, 2026
425a3d3
[autoform] Match claim repository object format
Deicyde Aug 31, 2026
d1f27e3
[autoform] Verify remote claim object formats
Deicyde Aug 31, 2026
b064434
[autoform] Cover remote claim format edge cases
Deicyde Aug 31, 2026
fdd927b
[autoform] Parse Git ref records by LF
Deicyde Aug 31, 2026
85bf1cb
[autoform] Decode Git ref bytes losslessly
Deicyde Aug 31, 2026
5222ad4
[autoform] Exercise packed non-UTF8 claim refs
Deicyde Aug 31, 2026
333c2a1
[autoform] Add backend-neutral orchestration overlay
Deicyde Aug 30, 2026
6fe5424
[autoform] Persist autonomous run state
Deicyde Aug 30, 2026
2dd9511
Add durable worktree and merge queue control plane
Deicyde Aug 31, 2026
06a4564
[autoform] Bind execution to exhaustive source coverage
Deicyde Aug 30, 2026
7ad4fbd
[autoform] Keep source artifacts out of publications
Deicyde Aug 30, 2026
4ca4356
[autoform] Normalize execution input failures
Deicyde Aug 30, 2026
577ec96
[autoform] Harden coverage snapshots and publication
Deicyde Aug 30, 2026
d05153f
[autoform] Reject malformed v2 selectors
Deicyde Aug 31, 2026
0b77ce6
[autoform] Close coverage v2 snapshot gaps
Deicyde Aug 31, 2026
aaeb6a1
[autoform] Parse case-sensitive YAML hex escapes
Deicyde Aug 31, 2026
7a73ed1
Use durable article IDs for worker claims
Deicyde Aug 31, 2026
84719fc
Require proof metadata transition in worker prompt
Deicyde Aug 31, 2026
913f193
Add fail-closed candidate admission gates
Deicyde Aug 31, 2026
a1f1945
Add independent candidate review contract
Deicyde Aug 31, 2026
46a2768
Harden independent candidate review evidence
Deicyde Aug 31, 2026
85693cb
Bind reviewer evidence to admitted commits
Deicyde Aug 31, 2026
4c6532b
Harden reviewer prompt transport
Deicyde Aug 31, 2026
68742b4
[autoform] Add resumable controller ledger APIs
Deicyde Aug 31, 2026
6074b71
[autoform] Harden controller ledger recovery
Deicyde Aug 31, 2026
6b10cdd
[autoform] Seal controller ledger invariants
Deicyde Aug 31, 2026
0cf2c76
[autoform] Close ledger recovery invariants
Deicyde Aug 31, 2026
a9b08fd
Reject stale candidates and preserve v1 integration history
Deicyde Aug 31, 2026
0638326
Harden replay and target adoption ledger
Deicyde Aug 31, 2026
c401545
Fence unresolved merge replays
Deicyde Aug 31, 2026
7988f49
Expose unresolved replay recovery state
Deicyde Aug 31, 2026
b470873
Harden replay recovery ledger invariants
Deicyde Aug 31, 2026
696635e
[autoform] Support Lean and Mathlib v4.33.0
toskua Aug 31, 2026
d1a2377
Ignore generated bytecode in template coverage test
Deicyde Aug 31, 2026
dd93e71
Isolate publication tests from Actions coordinates
Deicyde Aug 31, 2026
c0ee66d
Require complete coverage for execution
Deicyde Sep 2, 2026
14b9f6c
Add safe attempt candidate commits
Deicyde Aug 31, 2026
51ca91b
Harden candidate filesystem boundary
Deicyde Aug 31, 2026
8acbf33
Repair candidate recovery invariants
Deicyde Aug 31, 2026
efea199
Reject candidates with missing tree objects
Deicyde Aug 31, 2026
550866b
Harden candidate object verification
Deicyde Aug 31, 2026
6a5a132
Harden candidate creation and recovery invariants
Deicyde Sep 2, 2026
462cfe2
Expose coherent claim ownership fences
Deicyde Aug 31, 2026
1978588
Fence publication with article claim handoff
Deicyde Aug 31, 2026
adeead2
Block duplicate work during queue handoff
Deicyde Aug 31, 2026
bb6c912
Repair publication test doubles
Deicyde Aug 31, 2026
cdefa8d
Recover stale merge queue publications
Deicyde Aug 31, 2026
62abb52
Harden remote merge queue recovery
Deicyde Sep 2, 2026
4ef745c
Reject malformed remote ref observations
Deicyde Sep 2, 2026
65a820b
Add durable execution task planning
Deicyde Aug 31, 2026
1aa7fb3
Add redacted durable run status payload
Deicyde Aug 31, 2026
5811190
Adapt controller tests to persisted run settings
Deicyde Aug 31, 2026
13f249e
Bind controller startup to atomic task plans
Deicyde Aug 31, 2026
d61a291
Poll durable stop requests independently
Deicyde Aug 31, 2026
0451ade
Plan controller recovery before mutation
Deicyde Aug 31, 2026
91330b2
Honor stop requests before candidate admission
Deicyde Aug 31, 2026
fe77c9c
Plan resumable candidate admission
Deicyde Aug 31, 2026
2273523
Revalidate durable review evidence
Deicyde Aug 31, 2026
65ed0fe
Advance candidate admission durably
Deicyde Aug 31, 2026
3a023da
Honor durable review evidence size limit
Deicyde Aug 31, 2026
a11ca75
Cover passed candidate gate ordering
Deicyde Aug 31, 2026
c74d3cc
Close candidate admission restart races
Deicyde Aug 31, 2026
3e51daa
Bound fixed-gate command execution
Deicyde Sep 1, 2026
806d4d6
Fail closed without process isolation
Deicyde Sep 2, 2026
e9d33fe
Contain fixed-gate subprocess descendants
Deicyde Sep 2, 2026
d3f30f8
Make gate cleanup failures authoritative
Deicyde Sep 2, 2026
48a766a
Harden fixed-gate invocation cleanup
Deicyde Sep 2, 2026
16edb20
Fail closed on tracked process errors
Deicyde Sep 2, 2026
e11ba5a
Bound durable stop monitor shutdown
Deicyde Sep 2, 2026
079311b
Define hard gate provider identity
Deicyde Sep 2, 2026
861c3c7
Bind durable gate invocation requests
Deicyde Sep 2, 2026
b7678f9
Construct isolated Docker gate containers
Deicyde Sep 2, 2026
17c8350
Attest Docker gate creation policy
Deicyde Sep 2, 2026
49c2c1f
Bind immutable gate repository packs
Deicyde Sep 2, 2026
ef6bd86
Frame isolated gate evidence
Deicyde Sep 2, 2026
a8835e4
Materialize isolated gate inputs
Deicyde Sep 2, 2026
cc44cb8
Build bounded repository packs for isolated gates
Deicyde Sep 2, 2026
8fd3e4b
Repair isolated gate preflight invariants
Deicyde Sep 2, 2026
7dd285e
Publish gate packs without replacement
Deicyde Sep 2, 2026
16e4089
Contain gate pack cleanup failures
Deicyde Sep 2, 2026
bf8e790
Preserve gate pack cleanup precedence
Deicyde Sep 2, 2026
9809e09
Wrap gate pack path inspection errors
Deicyde Sep 2, 2026
d790930
Reject unencodable gate pack paths
Deicyde Sep 2, 2026
ca9171b
Bind Docker gate provider discovery
Deicyde Sep 2, 2026
1ca017b
Harden Docker gate provider discovery
Deicyde Sep 2, 2026
73d6c2b
Add canonical gate runtime bundle contract
Deicyde Sep 2, 2026
69c47e7
Harden Lake bundle manifest validation
Deicyde Sep 2, 2026
3059f85
Repair gate bundle contract review findings
Deicyde Sep 2, 2026
0359e13
Reject invalid repository pack paths early
Deicyde Sep 2, 2026
ba812d4
Resolve provider and bundle path validation
Deicyde Sep 3, 2026
a4bbbb5
[autoform] Add configurable multi-blueprint workspaces
toskua Aug 31, 2026
33a2139
[autoform] Harden multi-blueprint workspace convergence
Deicyde Aug 31, 2026
a80a647
[autoform] Make workspace initialization fail closed
Deicyde Aug 31, 2026
b069636
[autoform] Harden workspace publication bindings
Deicyde Sep 2, 2026
881a322
[autoform] Resolve workspace publication outcomes
Deicyde Sep 2, 2026
36b0766
[autoform] Harden workspace recovery and model pinning
Deicyde Sep 2, 2026
fc23bcc
[autoform] Make workspace publication crash-durable
Deicyde Sep 2, 2026
d38584e
Bind created directories before durable publication
Deicyde Sep 2, 2026
9642efa
[autoform] Stage directory publication safely
Deicyde Sep 2, 2026
336871a
[autoform] Complete staged directory portability checks
Deicyde Sep 2, 2026
3efa9d6
[autoform] Reject staged directory aliases
Deicyde Sep 2, 2026
1497000
Harden workspace root and scaffold bindings
Deicyde Sep 2, 2026
1a52668
Harden workspace snapshots and publication paths
Deicyde Sep 4, 2026
9491ef0
Lint the worker package
Deicyde Sep 4, 2026
b912654
Update worker fixtures for pinned identities
Deicyde Sep 4, 2026
00e34cd
Document current Autoform workflow
Deicyde Sep 4, 2026
4539426
Fix plugin installation and workspace usage docs
Deicyde Sep 4, 2026
6ad941a
Make consolidated tests portable and current
Deicyde Sep 4, 2026
8ecee4d
Detect Docker socket inode reuse during discovery
Deicyde Sep 4, 2026
1cf2ca8
Unify orchestration behind the Autoform CLI
Deicyde Sep 4, 2026
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
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "autoform",
"description": "Lean repository setup, Markdown-vault roadmaps, proving, and human or agent review with Lean LSP and REPL tools.",
"description": "Lean repository setup, Markdown-vault roadmaps, publication, and human or agent review with Lean LSP and REPL tools.",
"owner": {
"name": "Vivien Cabannes",
"url": "https://github.com/facebookresearch/autoform-bot"
},
"plugins": [
{
"name": "autoform",
"description": "Set up, plan, publish, prove, and review Lean formalizations as linked Markdown nodes checked through Lean LSP and REPL.",
"description": "Set up, plan, publish, and review Lean formalizations as linked Markdown nodes checked through Lean LSP and REPL.",
"source": "./",
"category": "productivity"
}
Expand Down
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "autoform",
"description": "Set up Lean repositories, build source-grounded Markdown roadmaps, and support human or agent review with Lean LSP and REPL tools.",
"description": "Set up Lean repositories, build source-grounded Markdown roadmaps, orchestrate ready work, and support human or agent review with Lean LSP and REPL tools.",
"version": "0.5.0",
"author": {
"name": "Vivien Cabannes",
Expand Down
3 changes: 2 additions & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "autoform",
"version": "0.5.0+codex.20260812000640",
"description": "Set up Lean repositories, build source-grounded Markdown roadmaps, and support human or agent review.",
"description": "Set up Lean repositories, build source-grounded Markdown roadmaps, orchestrate ready work, and support human or agent review.",
"author": {
"name": "Vivien Cabannes"
},
Expand All @@ -21,6 +21,7 @@
"defaultPrompt": [
"Set up this Lean repository with an Autoform vault, verification CI, and GitHub Pages without planning the mathematics.",
"Build or refine an Autoform roadmap from my mathematical sources.",
"Work through ready nodes using the Autoform CLI and durable claims.",
"Prepare the visual blueprint surfaces so I can review this formalization.",
"Judge this roadmap or Lean formalization with evidence-based review rubrics.",
"Develop Autoform itself through its executable formalization example."
Expand Down
120 changes: 115 additions & 5 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,72 @@ name: tests

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

concurrency:
group: tests-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
deterministic:
name: deterministic (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: "0.12.1"
python-version: ${{ matrix.python-version }}
enable-cache: true
- name: Install locked development environment
run: timeout --signal=TERM --kill-after=30s 3m uv sync --frozen --extra dev --extra repl
- name: Run deterministic tests
run: timeout --signal=TERM --kill-after=30s 8m make test-deterministic
- name: Lint
if: matrix.python-version == '3.13'
run: timeout --signal=TERM --kill-after=30s 2m make lint
- name: Validate and build the example
if: matrix.python-version == '3.13'
run: timeout --signal=TERM --kill-after=30s 4m make check-example

daemon:
name: daemon (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 12
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: "0.12.1"
python-version: ${{ matrix.python-version }}
enable-cache: true
- name: Install locked development environment
run: timeout --signal=TERM --kill-after=30s 3m uv sync --frozen --extra dev --extra repl
- name: Run detached runtime tests
env:
AUTOFORM_REPL_TOTAL_WORKERS: "1"
AUTOFORM_MAX_LEAN_PROJECTS: "1"
run: timeout --signal=TERM --kill-after=30s 8m make test-daemon

installed-wheel:
name: installed wheel (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
steps:
Expand All @@ -20,7 +77,60 @@ jobs:
version: "0.12.1"
python-version: ${{ matrix.python-version }}
enable-cache: true
- run: uv sync --extra dev --extra repl
- run: uv run ruff check autoform_cli servers tests
- run: uv run pytest -q
- run: make check-example
- name: Install locked development environment
run: timeout --signal=TERM --kill-after=30s 3m uv sync --frozen --extra dev --extra repl
- name: Build, install, and probe the wheel
run: timeout --signal=TERM --kill-after=30s 10m make test-wheel

real-lean:
name: real Lean (pinned v4.32.2)
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
with:
version: "0.12.1"
python-version: "3.13"
enable-cache: true
- name: Install locked development environment
run: timeout --signal=TERM --kill-after=30s 3m uv sync --frozen --extra dev --extra repl
- name: Verify the repository Lean and Mathlib pins
run: |
set -euo pipefail
test "$(tr -d '\r\n' < skills/setup/assets/cabannes-thesis-project/lean-toolchain)" = "leanprover/lean4:v4.32.2"
grep -Fq 'rev = "v4.32.2"' skills/setup/assets/cabannes-thesis-project/lakefile.toml
uv run python - <<'PY'
import json
from pathlib import Path

catalog = json.loads(Path("autoform_cli/project/releases.json").read_text(encoding="utf-8"))
pinned = [
release
for release in catalog["releases"]
if release["lean"]["toolchain"] == "leanprover/lean4:v4.32.2"
and release["mathlib"]["revision"] == "v4.32.2"
]
assert len(pinned) == 1
PY
- name: Install pinned Elan
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=15s 2m curl -sSfL \
https://github.com/leanprover/elan/releases/download/v4.2.3/elan-x86_64-unknown-linux-gnu.tar.gz \
-o elan.tar.gz
echo "df0b2b3a439961ffcbb3985214365ffe40f49bc871df04dff268c7d8e21ca8b2 elan.tar.gz" \
| sha256sum --check --strict
tar xzf elan.tar.gz
./elan-init -y --default-toolchain none
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
- name: Install and verify pinned Lean
run: |
set -euo pipefail
timeout --signal=TERM --kill-after=30s 10m elan toolchain install leanprover/lean4:v4.32.2
version="$(timeout --signal=TERM --kill-after=10s 30s elan run leanprover/lean4:v4.32.2 lean --version)"
printf '%s\n' "$version"
grep -Fq "Lean (version 4.32.2" <<<"$version"
command -v lake
- name: Run mandatory real-Lean tests
run: timeout --signal=TERM --kill-after=30s 25m make test-real-lean
7 changes: 6 additions & 1 deletion .muse-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "autoform",
"displayName": "AutoForm Bot",
"version": "0.5.0",
"description": "Set up Lean repositories, build Markdown roadmaps, and support human or agent review.",
"description": "Set up Lean repositories, build Markdown roadmaps, orchestrate ready work, and support human or agent review.",
"compat": {
"source": "native",
"manifestDir": ".muse-plugin"
Expand All @@ -21,6 +21,11 @@
"path": "skills/roadmap/SKILL.md",
"enabledDefault": true
},
{
"id": "orchestrate",
"path": "skills/orchestrate/SKILL.md",
"enabledDefault": true
},
{
"id": "human-review",
"path": "skills/human-review/SKILL.md",
Expand Down
17 changes: 15 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
.PHONY: setup test lint check-example
.PHONY: setup test test-deterministic test-daemon test-wheel test-real-lean lint check-example

THESIS_EXAMPLE := skills/setup/assets/cabannes-thesis-project
PYTEST := uv run pytest -q

setup:
uv sync --extra dev --extra repl

test:
uv run pytest -q
$(PYTEST)

test-deterministic:
$(PYTEST) -m "not daemon and not installed_wheel and not real_lean"

test-daemon:
$(PYTEST) -m daemon

test-wheel:
$(PYTEST) -m installed_wheel

test-real-lean:
$(PYTEST) -m real_lean

lint:
uv run ruff check autoform_cli servers tests
Expand Down
Loading
Loading