From 97c45b1bce45bfe2b15ae69e55a38b1446587d05 Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Mon, 19 Oct 2026 23:45:25 +0200 Subject: [PATCH 1/2] chore: pin ct-agents v0.1.0 The recipes are read from a git-ignored clone at the pinned tag, not from main. Co-Authored-By: Claude Sonnet 5.5 --- .gitignore | 3 +++ AGENTS.md | 22 ++++++++++++++++++---- CHANGELOG.md | 3 +++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7af5975f..bddada90 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ CLAUDE.local.md # ct-conventions, cloned at the tag pinned in AGENTS.md .conventions/ + +# ct-agents, cloned at the tag pinned in AGENTS.md +.ct-agents/ diff --git a/AGENTS.md b/AGENTS.md index 11071908..8cb8ae11 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,6 +13,7 @@ src/ # onepass.jl (the `@def` parser), defaults.jl, initial_guess.jl, test/ # Test suite: flat files (not test/suite/) docs/ # Documentation site (DocumenterVitepress) .conventions/ # ct-conventions, cloned at the pinned tag (git-ignored) +.ct-agents/ # ct-agents, cloned at the pinned tag (git-ignored) ``` --- @@ -66,8 +67,21 @@ trigger labels are described in ## Recurring tasks +How a recurring task is done lives in [ct-agents](https://github.com/control-toolbox/ct-agents), +pinned below to a SemVer release tag (`vX.Y.Z`). Read it from a local clone in `.ct-agents/` +(git-ignored, not a submodule). If it is missing, or `git -C .ct-agents describe --tags` is +not the pinned tag, (re)create it: + +```bash +rm -rf .ct-agents +git -c advice.detachedHead=false clone --quiet --depth 1 --branch v0.1.0 https://github.com/control-toolbox/ct-agents.git .ct-agents +``` + +**Pinned version: ct-agents v0.1.0.** State it, with the ct-conventions version, in +plans and reports. + - **Release.** When asked, in any language, to prepare a release, follow - [`recipes/release.md`](https://github.com/control-toolbox/ct-agents/blob/main/recipes/release.md) - of ct-agents (rules `REL1`โ€“`REL7`). Read it with - `gh api repos/control-toolbox/ct-agents/contents/recipes/release.md -H "Accept: application/vnd.github.raw"`. - Stable or beta is the human's choice: if the request does not say, ask; never infer it. + [`recipes/release.md`](.ct-agents/recipes/release.md) (rules `REL1`โ€“`REL7`). Stable or + beta is the human's choice: if the request does not say, ask; never infer it. State in + the proposal the versions you apply: ct-agents, ct-conventions, and the commit of the + CTActions clone `release.jl` runs from. diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e049600..8197bd69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ct-conventions pinned at `v0.7.0` in `AGENTS.md`: the release rules `REL1`โ€“`REL7` in the index, and a *Recurring tasks* section pointing to the release recipe of ct-agents. +- ct-agents pinned at `v0.1.0` in `AGENTS.md`: the recipes (the release) are read from a + git-ignored clone in `.ct-agents/` at that tag, not from `main` of ct-agents, and the + proposal of a release states the versions applied. ### ๐Ÿงช Testing From 54ea3a2c72549cb7c908c24f74bce0b48e749e97 Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Mon, 19 Oct 2026 23:55:32 +0200 Subject: [PATCH 2/2] chore: pin ct-agents v0.2.0 and ct-conventions v0.7.1, name the clones .ct-conventions and .ct-agents Co-Authored-By: Claude Sonnet 5.5 --- .gitignore | 2 +- AGENTS.md | 26 +++++++++++++------------- CHANGELOG.md | 7 ++++--- CONTRIBUTING.md | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index bddada90..a61fdf39 100644 --- a/.gitignore +++ b/.gitignore @@ -36,7 +36,7 @@ CLAUDE.local.md .coverage/ # ct-conventions, cloned at the tag pinned in AGENTS.md -.conventions/ +.ct-conventions/ # ct-agents, cloned at the tag pinned in AGENTS.md .ct-agents/ diff --git a/AGENTS.md b/AGENTS.md index 8cb8ae11..49f478b1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,7 +12,7 @@ CTParser is a single flat module โ€” no submodule split, no `ext/`. src/ # onepass.jl (the `@def` parser), defaults.jl, initial_guess.jl, utils.jl test/ # Test suite: flat files (not test/suite/) docs/ # Documentation site (DocumenterVitepress) -.conventions/ # ct-conventions, cloned at the pinned tag (git-ignored) +.ct-conventions/ # ct-conventions, cloned at the pinned tag (git-ignored) .ct-agents/ # ct-agents, cloned at the pinned tag (git-ignored) ``` @@ -22,26 +22,26 @@ docs/ # Documentation site (DocumenterVitepress) The coding conventions live in [ct-conventions](https://github.com/control-toolbox/ct-conventions), pinned below to a -SemVer release tag (`vX.Y.Z`). Read them from a local clone in `.conventions/` -(git-ignored, not a submodule). If it is missing, or `git -C .conventions describe --tags` +SemVer release tag (`vX.Y.Z`). Read them from a local clone in `.ct-conventions/` +(git-ignored, not a submodule). If it is missing, or `git -C .ct-conventions describe --tags` is not the pinned tag, (re)create it: ```bash -rm -rf .conventions -git -c advice.detachedHead=false clone --quiet --depth 1 --branch v0.7.0 https://github.com/control-toolbox/ct-conventions.git .conventions +rm -rf .ct-conventions +git -c advice.detachedHead=false clone --quiet --depth 1 --branch v0.7.1 https://github.com/control-toolbox/ct-conventions.git .ct-conventions ``` -**Pinned version: ct-conventions v0.7.0.** Cite rules by identifier (`MOD3`, `TST1`), and +**Pinned version: ct-conventions v0.7.1.** Cite rules by identifier (`MOD3`, `TST1`), and state the version you applied in plans and reports. Read in this order: | File | Content | | --- | --- | -| [`rules/general.md`](.conventions/rules/general.md) | Rules that hold everywhere โ€” **always read** | -| [`README.md`](.conventions/README.md) | Index of the rule files, one per area (`MOD`, `TYP`, `DIM`, `EXC`, `PERF`, `DOC`, `TST`, `SITE`, `CHG`, `REL`) | -| [`method.md`](.conventions/method.md) | How to work: tests, coverage, docs build, output capture | -| [`plan-template.md`](.conventions/plan-template.md) | Template for a substantial piece of work | +| [`rules/general.md`](.ct-conventions/rules/general.md) | Rules that hold everywhere โ€” **always read** | +| [`README.md`](.ct-conventions/README.md) | Index of the rule files, one per area (`MOD`, `TYP`, `DIM`, `EXC`, `PERF`, `DOC`, `TST`, `SITE`, `CHG`, `REL`) | +| [`method.md`](.ct-conventions/method.md) | How to work: tests, coverage, docs build, output capture | +| [`plan-template.md`](.ct-conventions/plan-template.md) | Template for a substantial piece of work | How agents behave on these repositories is described in [ct-agents](https://github.com/control-toolbox/ct-agents). The CI workflows and their @@ -59,7 +59,7 @@ trigger labels are described in - **Structured errors** โ€” seven typed exceptions; pick by the choice rule (`EXC1`). - **Type stability enforced** โ€” hot paths `@inferred`-clean, verified with JET (`TYP8`, `PERF1`โ€“`PERF5`). - **1-D is a scalar** โ€” a one-dimensional state/control/variable is a `Number` (`DIM1`). -- **Plan before code** โ€” a local agent proposes a plan ([`plan-template.md`](.conventions/plan-template.md)) and waits for confirmation before working on code. The process for remote agents is still to be defined. +- **Plan before code** โ€” a local agent proposes a plan ([`plan-template.md`](.ct-conventions/plan-template.md)) and waits for confirmation before working on code. The process for remote agents is still to be defined. - **Docstrings last** โ€” written once the implementation is stable (`DOC1`โ€“`DOC8`). - **The human merges** โ€” an agent never merges a pull request, except a release PR in `autonomous` mode, and then only with `release.jl merge` (see below). @@ -74,10 +74,10 @@ not the pinned tag, (re)create it: ```bash rm -rf .ct-agents -git -c advice.detachedHead=false clone --quiet --depth 1 --branch v0.1.0 https://github.com/control-toolbox/ct-agents.git .ct-agents +git -c advice.detachedHead=false clone --quiet --depth 1 --branch v0.2.0 https://github.com/control-toolbox/ct-agents.git .ct-agents ``` -**Pinned version: ct-agents v0.1.0.** State it, with the ct-conventions version, in +**Pinned version: ct-agents v0.2.0.** State it, with the ct-conventions version, in plans and reports. - **Release.** When asked, in any language, to prepare a release, follow diff --git a/CHANGELOG.md b/CHANGELOG.md index 8197bd69..85b00e69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ct-conventions pinned at `v0.7.0` in `AGENTS.md`: the release rules `REL1`โ€“`REL7` in the index, and a *Recurring tasks* section pointing to the release recipe of ct-agents. -- ct-agents pinned at `v0.1.0` in `AGENTS.md`: the recipes (the release) are read from a - git-ignored clone in `.ct-agents/` at that tag, not from `main` of ct-agents, and the - proposal of a release states the versions applied. +- ct-agents pinned at `v0.2.0` and ct-conventions at `v0.7.1` in `AGENTS.md`: the recipes (the + release) are read from a git-ignored clone in `.ct-agents/` at that tag, not from `main` + of ct-agents, and the proposal of a release states the versions applied. The clone of the + conventions is now `.ct-conventions/` (it was `.conventions/`), like `.ct-agents/`. ### ๐Ÿงช Testing diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4480cb9f..f5b0d2a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,6 +17,6 @@ If you want to ask a question, feel free to start a discussion [here](https://gi ## Developer Resources -The [ct-conventions](https://github.com/control-toolbox/ct-conventions) repository (coding rules, method, plan template) is pinned to a SemVer release tag in `AGENTS.md` ("Pinned version"). Read it from a local clone in `.conventions/`, which git ignores; `AGENTS.md` gives the clone command. +The [ct-conventions](https://github.com/control-toolbox/ct-conventions) repository (coding rules, method, plan template) is pinned to a SemVer release tag in `AGENTS.md` ("Pinned version"). Read it from a local clone in `.ct-conventions/`, which git ignores; `AGENTS.md` gives the clone command. It is not a git submodule: `Pkg.add` on Julia 1.10 fails on a package whose tree contains one (`cannot get submodules without a working tree`). To bump it, change the tag in `AGENTS.md` (the "Pinned version" line and the clone command), then re-clone.