Repository navigation
feat: v0.11.0 — rename to aloop, first end-to-end live run, gate hardening - #7
Merged
Merged
Conversation
…package historical Adds docs/OVERVIEW.md (what agentic-agile is, from the code as of v0.10.1), a milestone table at the top of docs/ROADMAP.md, and the CONTRIBUTING.md the README badge links to. Flags DESIGN/ARCHITECTURE/KICKSTART as historical and fixes stale role counts and the README CI section. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YCeq6p3KUdSsfTzQXkCr96
The current `claude plugin validate --strict` rejects unquoted placeholders (a plugin path with a space would split). Quote every hook command path and teach validate-suites.py to strip the quotes when matching gate names. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YCeq6p3KUdSsfTzQXkCr96
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YCeq6p3KUdSsfTzQXkCr96
…liases Plugin, marketplace, skill, CLI, OpenCode plugin file and docs move to aloop. agentic / agentic init / agentic-init / agentic bind keep working; host installs remove pre-rename generated files. On-disk layout unchanged (planned for M1). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
adeelahmad
marked this pull request as ready for review
October 17, 2026 02:19
make conformance runs the real RED/GREEN gates on a fixture crate in linked worktrees: 16 checks over §6.3-6.9; uncovered items are printed with reasons. Wired into make ci and CI's rust job. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Story dirs hold init.md/output.md comms the planning schema does not know, so every valid tasks.md/validate.md/stories.md write was blocked once a story had comms. Found by the new §6.2 conformance fixture (now 20 checks). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
CI has no RUSTUP_HOME, so rustup looked for its toolchain under the fake HOME and every cargo call failed. Reproduced locally with RUSTUP_HOME unset. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
…dd live smoke test stat -f %m prints a filesystem report on Linux, so the lock-recency arm crashed under set -u and the hook exited 1 (non-blocking): the supervisor's src/ write went through. GNU stat first, numeric check. Found by the new live smoke test (scripts/smoke/live-claude.sh, make smoke-live YES=1), which closes ROADMAP M0. Adds M0.6 (gates fail closed) to the ROADMAP. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
task.env sits in the worker's worktree; sourcing it let a worker append 'exit 0' (or GATE_RUN_MATRIX=0 / SKIP_HOOKS=1) and pass a failing GREEN. Gates and selfcheck now read only the contract keys as data. Four conformance cases (24 total) failed before the fix. ROADMAP M0.7 tracks moving the contract out of the worktree. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
…M0.6) Any exit other than 0/2 is a non-blocking hook error on Claude Code, so a gate bug let the action through. _failclosed.sh maps it to exit 2 with the reason; loaded by every sub-agent gate and by supervisor-scope inside a sprint. fail-closed.test.py (5 checks); live smoke 6/6 (/bin/bash.0034). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
A RED worker could set AGENT_ROLE=planner in its task.env and skip the worktree-isolation check. Gates now read agent_type from the hook payload and block on a contradiction. 2 new conformance cases (26 total) failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
On Claude Code isolation: "worktree" creates the worktree at dispatch, so the supervisor could never pre-write task.env there (live probe). The contract now lives in .agentic/state/tasks/<TASK_ID>.env and the dispatch prompt's first line names the task; gates and the time box find it from the host transcript. A worktree copy that disagrees blocks, sub-agents may not Write/Edit the contract, and the time box no longer hands a worker another task's budget. Tests first: 4 conformance cases (30 total), 2 budget and 2 supervisor-scope checks failed before the change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Claude Code names a plugin's sub-agents <plugin>:<agent>, and a plain-name hook matcher is an exact list, so no SubagentStop/SubagentStart role gate ever matched a plugin install: only workers' voluntary self-checks ran. Found by the first live end-to-end run and confirmed with a probe plugin. Matchers now name both forms. Adds the e2e live run (make e2e-live). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Both found by the first live e2e run: workers left work uncommitted, so the supervisor copied files into main past the gate's diff; and 'selfcheck <role>' crashed with AGENT_ROLE unbound on good work. Gates now block uncommitted work (an untracked Cargo.lock aside), workers are told to commit, the playbook says to merge the branch, and selfcheck exports the role. 2 conformance cases (32 total) failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Live e2e run 2: a comma-separated SCOPE_GLOBS blocked GREEN 34 times and a mistyped AGENT_ROLE in the main-tree contract looped the final gate; the worker cannot edit the contract, so it retried until it gave up. Lists accept commas, and the host's role wins over the contract's with a WARN (a contradicting worktree copy still blocks). 1 conformance case (33 total) failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
e2e run 2: every worker's first selfcheck failed with STORY_DIR unset, because the worktree Claude Code makes at dispatch has no task.env and selfcheck has no host payload. The time box's tool-call hook now copies the supervisor's contract (picked by the dispatch prompt's TASK_ID) into the worktree, refreshing it when the contract is rewritten. 1 budget check failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
e2e run 3: RED's test file failed cargo fmt --check, GREEN may not touch tests, so GREEN's gate blocked 19 times until the supervisor stepped in. The role that writes a file now has to leave it formatted. 1 conformance case (35 total) failed before. ROADMAP records runs 2 and 3. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
gate-supervisor-scope now also runs on Bash: a dispatched agent's command that names .agentic/state/ or .agentic/task.env together with a write (redirect, tee, sed -i, cp, mv, rm, ...) is blocked; reads are allowed. Closes the last open M0.7 item. 2 supervisor-scope checks failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
e2e run 5: workers cd'd to the main tree to read their story, the SubagentStop hook ran there and 27 scaffolder stops were blocked as 'isolation dropped'. Gates now check .claude/worktrees/agent-<agent_id> first. The Bash contract guard is per simple command (it had blocked a read-only probe), and RED's out-of-scope message says how to undo. 1 conformance case (36 total) and 2 supervisor-scope checks failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
Every e2e run had 19-30 sub-agent commands reading the plugin's bin/, schemas/ and pipeline/ (the planner alone 18 in run 5) to work out formats that selfcheck already reports. Each agent prompt now says so, and e2e-live prints the count so the effect is measured. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC
adeelahmad
pushed a commit
that referenced
this pull request
Oct 17, 2026
…map branch Conflicts resolved by keeping both sides: aloop names and aloop:<role> matchers from #7, with this branch's budget-stop matcher for every role, no post-kill narration, the resume check and the boundary rule. The init settings (TOKEN_METER, sprint envelope) move to aloop-init. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j4wLin3oJTtnvjE9Lq2VV
adeelahmad
pushed a commit
that referenced
this pull request
Oct 17, 2026
… diff Since #7, workers must commit before their gate runs. With no BASE_REF, changed_paths only listed uncommitted changes, so a committed out-of-scope file passed GREEN's (and RED's tests-only) scope check. It now also takes the branch's commits since it left the main tree's HEAD. targets-scope.test.py failed before. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014j4wLin3oJTtnvjE9Lq2VV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Adeel · project thread
Before: the plugin installs as
agentic-agile@agentic-agile-marketplace. Nothing had ever run the whole loop live. On Claude Code plugin installs no role gate actually fired: Claude Code names the workersaloop:red-worker, and the hook matchers only listedred-worker. Workers could also pass or widen their own gate by editingtask.env, and a gate that crashed let the action through.After: it installs as
aloop@aloop-marketplace(CLIaloop; the old names still work as aliases).make e2e-live YES=1turns a one-line intent (a semver parser) into planned, tested code merged into main in a real Claude Code session. Latest run: 11/11 checks, 12 min, $0.79, with a sonnet supervisor and haiku workers. Every role gate fires on the host. The task contract is the supervisor's, and each hole has a test that failed before its fix.Builds on #6's branch (CLAUDE.md, OVERVIEW, ROADMAP). Each change is its own commit.
Changes, in commit order.
rename-compat.test.py.make ciand CI.stat -fcrash, fail-open). Found by the live smoke test.task.envwas sourced, soexit 0passed a failing GREEN. It is now parsed instead._failclosed.sh).plannerto skip the isolation check..agentic/state/tasks/<TASK_ID>.env, and the dispatch prompt's first line names the task. A live probe showed Claude Code creates the worktree at dispatch, so a contract pre-written into the worktree was impossible there. A worktree copy that disagrees with the contract blocks, and workers can't Write or Edit the contract. The time box no longer gives a worker another task's budget.aloop:<role>(critical). Found by e2e run 1, where every verdict was a self-check.hook-matchers.test.py.selfcheckcrash on good work (AGENT_ROLEunbound).selfcheckfinds its task.Evidence.
make ciis green locally, including shellcheck. Conformance passes 35/35; the budget, supervisor-scope, hook-matcher and fail-closed suites all pass. Results of the live e2e runs:🤖 Generated with Claude Code
https://claude.ai/code/session_015QxyVf3NgwsgRyYpBgDDTC