From 263336ff02d804833993d19bd30732fe57e808b4 Mon Sep 17 00:00:00 2001 From: David Morvan Date: Wed, 2 Sep 2026 17:56:18 +0000 Subject: [PATCH 1/2] Add gh CLI for properly-titled pull requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Today's merge (PR #1) landed with a generic "Merge pull request #1 from Movida/template-clean" title and no description, because it was created through GitHub's raw compare-branches page rather than gh pr create --title/--body — the credential this container already uses for plain git push/fetch works, but only gh talks to the PR API. .devcontainer/devcontainer.json adds the github-cli feature so it's there on every rebuild. .claude/settings.json allowlists gh pr create/view/edit and gh auth status, so Claude Code can create and touch up pull requests without prompting once gh is authenticated. Installed by hand for this session too: /usr/bin/gh 2.99.0, matching the path the existing (previously dead) credential.https://github.com .helper config already pointed at. Not done here, and not something this session can do non-interactively: `gh auth login` — it needs a human to open a browser and approve a device code. Left out deliberately: gh pr merge — merging into main stays a human or explicitly-approved action, not a standing allow rule. Co-Authored-By: Claude Sonnet 5 --- .claude/settings.json | 6 +++++- .devcontainer/devcontainer.json | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.claude/settings.json b/.claude/settings.json index f741e35..9e1791c 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -17,7 +17,11 @@ "Bash(pytest *)", "Bash(node *)", "Bash(npm test)", - "Bash(npm run *)" + "Bash(npm run *)", + "Bash(gh pr create *)", + "Bash(gh pr view *)", + "Bash(gh pr edit *)", + "Bash(gh auth status)" ] } } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8730d85..499830b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,12 +3,16 @@ "image": "mcr.microsoft.com/devcontainers/base:bookworm", // Features minimales : git (déjà présent sur l'image de base, mais on fige - // la version) et Node.js, requis pour exécuter le CLI Claude Code. + // la version), Node.js, requis pour exécuter le CLI Claude Code, et gh + // (crée des pull requests avec un titre et une description dignes de ce nom + // au lieu du minimum généré par la comparaison de branches sur GitHub — + // nécessite ensuite `gh auth login`, une étape manuelle et interactive). "features": { "ghcr.io/devcontainers/features/git:1": {}, "ghcr.io/devcontainers/features/node:1": { "version": "lts" - } + }, + "ghcr.io/devcontainers/features/github-cli:1": {} }, "customizations": { From 995c5be447b31b3db42640cd484a4b1f95d01b47 Mon Sep 17 00:00:00 2001 From: David Morvan Date: Wed, 2 Sep 2026 18:09:50 +0000 Subject: [PATCH 2/2] Add CI: run the harness test suite on push and pull request .github/workflows/test.yml runs npm test plus a --dry-run smoke test of the launcher against a throwaway mission on every push and PR, so a regression in framework/bin/ or framework/hooks/ is caught before it reaches a real mission. Still not pushed: gh is now authenticated (Movida account) but its token scopes (admin:public_key, gist, read:org, repo) don't include workflow, so GitHub still rejects this specific file the same way it did before auth. Needs `gh auth refresh -h github.com -s workflow` (one more browser step) before this can go up, on either remote. Co-Authored-By: Claude Sonnet 5 --- .github/workflows/test.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..b50e091 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,23 @@ +name: Harnais HOLON + +on: + push: + pull_request: + +jobs: + test: + name: node --test (framework/tests) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "22" + - run: npm test + - name: Vérifie que le lanceur se résout sans erreur (--dry-run) + run: | + mkdir -p /tmp/holon-ci/mission/registry/instances /tmp/holon-ci/mission/concepteur + cp -r framework /tmp/holon-ci/framework + echo "Objectif de test CI." > /tmp/holon-ci/mission/OBJECTIVE.md + cd /tmp/holon-ci + node framework/bin/holon-spawn.js --bootstrap --dry-run