Skip to content

Commit 251c3eb

Browse files
Merge pull request #20 from MountainUnicorn/wave3-v097
v0.9.7 — methodology reframe: swarm-over-Workflows, maturity-led README, skill self-scan
2 parents 6b9958a + 6a35605 commit 251c3eb

87 files changed

Lines changed: 1614 additions & 208 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.add/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://github.com/MountainUnicorn/add/config.schema.json",
3-
"version": "0.9.6",
3+
"version": "0.9.7",
44
"project": {
55
"name": "ADD",
66
"description": "Agent Driven Development \u2014 Claude Code plugin implementing an AI-native SDLC methodology",

.add/handoff.md

Lines changed: 41 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,43 @@
11
# Handoff — v1.0 GA wave execution (2026-06-14)
22

3-
## Where things stand
4-
Branch **`wave-exec-v096`** (off `main` @ 0896bc0). The **v0.9.6 batch (Waves 0–2) is complete and fully verified** — 9 commits, 35 files, all 15 fixture suites green, `compile --check` clean. Not pushed; no release cut (those are human/keychain-gated).
5-
6-
Executed under ADD's own SDLC: RED-first tests where applicable, an **independent verifier agent** + an **agent-to-agent retro** per wave, learnings captured to `.add/learnings.json` (L-035…L-046).
7-
8-
## Done
9-
10-
### Wave 0 — unblock `main` (P0)
11-
- **C1**: rule count was 19, reality 20 → guardrails red. Made the count **compile-derived** (`{{RULE_COUNT}}` in `runtimes/claude/CLAUDE.md`, filled from the autoload-filtered set in `compile.py`). Strengthened `rule-parity` to read the compiled artifact + assert all prose surfaces (CLAUDE.md/README.md/CONTRIBUTING.md). Now 9/9.
12-
- **C3**: bumped `checkout v4→v5`, `setup-python v5→v6`, `github-script v7→v8` across all 4 workflows (Node-20 deprecation).
13-
- Verifier caught 3 missed surfaces + a semantic bug ({{RULE_COUNT}} counted all files, not autoload) — all fixed before commit.
14-
15-
### Wave 1 — release tooling (P0)
16-
- **C2 / #18**: `release.sh` could exit 0 without publishing. Added array-based gh flags + a post-create `gh release view` assertion that fails loud with a recovery command. Behavioral regression test (mock git/gh/python3) — **mutation-verified** to go red when the fix is reverted.
17-
18-
### Wave 2 — v0.9.6 truth-pass
19-
- **C5**: CONTRIBUTING "three checks"→four; documented community-PR strategy.
20-
- **D1**: `model-roles.md` capability-tier table (Opus 4.8/Sonnet 4.6/Haiku 4.5; gpt-5.5/gpt-5.x-codex).
21-
- **B3**: added missing Codex `verify` sub-agent (`verify.toml` + 2 compile.py enums + test). 5 agents now; codex suite 58/58.
22-
- **D3 (P0/1)** — found a real **security bug**: the `unicode-tag-block` regex was a broken byte-class matching ~any multibyte UTF-8 (652/652 sampled events were benign false positives, 0 real attacks). Replaced with a precise `(?:\xF3\xA0[\x80\x81][\x80-\xBF]){3,}` — verifier independently confirmed it covers all 128 tag codepoints and rejects benign chars; AC-028 real attack still fires. Switched the JSONL audit writer to `jq -cn` (atomic single-line). Gitignored + untracked `.add/security/`. Documented the audit trail in SECURITY.md. Added a **mutation-verified** benign-multibyte regression fixture.
23-
24-
## Next: the boundary
25-
26-
### Wave 3 (v0.9.7 methodology) — NEEDS HUMAN DIRECTION before auto-execution
27-
These are subjective positioning/voice decisions, not mechanical:
28-
- **A1** swarm-protocol → layer over native Workflows (the strategic reframe — wording matters; affects ADD's market story).
29-
- **A3** swarm-state machine-readable format contract (small, do first — A1 depends on it).
30-
- **C4** GA launch plan / `/add:announce` (marketing strategy; partly the separate `getadd.dev` repo).
31-
- **D4** lead README with the maturity ladder (positioning/voice).
32-
- **A2** `core/workflows/` scaffolding (spec+infra only pre-GA; Claude-specific — needs a home that compile-drift tolerates).
33-
- **D3 P2** skill self-scan + CI gate.
34-
35-
### Wave 4 (v0.10) — automatable later
36-
A3 panel impl; **B4** F-012 spike (now consumes the fixed regex/writer from D3); D3 self-scan CI enforcement.
37-
38-
### Wave 5 (v0.11) — BLOCKED on a live spike
39-
Unified **B1+B2** Codex re-baseline is gated on **Q-001**: a live spike against the current Codex CLI (the 0.122 pin is stale). Can't be done without running the real CLI.
40-
41-
### GA tag — externally/human gated (cannot be automated)
42-
- Anthropic marketplace approval (filed 2026-02-14, status unknown — external).
43-
- 60-day beta calendar gate (earliest honest tag ~2026-06-22).
44-
- A real GPG-signed release cut (keychain/pinentry — interactive).
45-
- ADD's own `beta→ga` self-promotion + release-evidence bundle (currently unowned per cohesion review).
46-
47-
## Acceptance test for Wave 1 (do this at the real v0.9.6 cut)
48-
Judge success from the new `published and verified` line + a manual `gh release view`**not** from exit 0 (the habit being retired). See L-042.
49-
50-
## Suggested follow-up rule (from Wave 1 retro, L-039)
51-
"Verify the side effect, never trust the exit code" is now a twice-proven bug class (F-001 + #18). Worth encoding as a rule near `core/rules/quality-gates.md`.
3+
## Shipped this session
4+
- **v0.9.6 RELEASED** (signed, verified, on the marketplace cache). Waves 0–2:
5+
CI unblocked (rule count compile-derived; Node-24 actions), release.sh #18
6+
fixed (verified live — "published and verified"), truth-pass, and a real
7+
injection-defense regex fix. PR #19 merged to `main`.
8+
- **Wave 3 (v0.9.7) — done on branch `wave3-v097`, NOT yet pushed/released:**
9+
- A3 — swarm-state machine-readable format contract.
10+
- D3-P2 — skill self-scan CI gate (`scripts/self-scan-skills.py` + `skill-self-scan`
11+
guardrail + SECURITY.md trust signal). Verifier caught a real hole (a `(?m)`
12+
pattern was silently never gating); fixed + mutation-guarded
13+
(`tests/security/test-self-scan.sh`).
14+
- A2 — `runtimes/claude/workflows/` scaffold + `specs/workflow-lifecycle-scripts.md`
15+
(inert; zero behavior change).
16+
- A1 — swarm-protocol + agent-coordination reframed as policy-over-native-Workflows
17+
(manual fallback retained; WIP semantics invariant; emission deferred to v1.1).
18+
- D4 — README now leads with the maturity ladder ("One dial scales the rigor").
19+
- **GA-gate decision (overrides roadmap D7):** the arbitrary 60-day beta floor is
20+
dropped; v1.0 gates on **Anthropic marketplace approval** + the substantive
21+
criteria. Recorded in v1.0-roadmap.md and milestones/v1.0-ga.md.
22+
23+
## State
24+
- Every wave: independent verifier + agent-to-agent retro; learnings L-035…L-049.
25+
- All 16 fixture suites green; `compile --check` clean; self-scan clean.
26+
- `wave3-v097` is 6 commits ahead of `main`, local only.
27+
28+
## Open / next
29+
1. **Wave 3 release:** push `wave3-v097`, open a PR, then version-bump to v0.9.7
30+
(VERSION, CHANGELOG, migrations hop, README badge) and cut the release — same
31+
flow as v0.9.6.
32+
2. **C4 launch plan** is preserved as a tracked doc (`docs/wave3-drafts/C4-launch-plan.md`)
33+
but NOT applied — `/add:announce` skill not built yet; pending a decision on
34+
one-skill-with-`--target` vs two, and the brand strategy.
35+
3. **A1/A2 emission** (actual Workflow descriptor scripts) deferred to v1.1.
36+
4. **Waves 4–5** (v0.10/v0.11): B4 F-012 spike now consumes the fixed
37+
regex/writer; B1+B2 Codex re-baseline still needs the live Q-001 CLI spike.
38+
5. **GA tag:** gated on marketplace approval (filed 2026-02-14) + install smoke +
39+
release-evidence bundle + ADD's own beta→ga self-promotion.
40+
41+
## Acceptance test reminder (release tooling)
42+
Judge any release by the `published and verified` line + a manual `gh release
43+
view`, never bare exit 0 (L-042). v0.9.6 passed this live.

.add/learnings.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,45 @@
604604
"date": "2026-06-14",
605605
"classified_by": "agent",
606606
"checkpoint_type": "retro"
607+
},
608+
{
609+
"id": "L-047",
610+
"title": "A security self-scan can have the exact bug it exists to catch \u2014 validate the detector, not just the content",
611+
"body": "ADD's new skill self-scan (D3-P2) shipped with a (?m)-prefixed pattern handed to grep -E, which rejects it as invalid (rc=2); file_matches treated rc=2 as 'no match', so the most common documented payload (new-instructions-heading, HIGH) silently never gated \u2014 the precise 'check that doesn't check' failure the scan exists to prevent. Independent verification caught it post-commit (my own probe happened to use a casing that masked it). Fix: validate every pattern is live at startup and WARN loudly if grep rejects it; mutation-test that the gate fires on EACH engine path (ERE, (?m), byte-mode). Reinforces L-039/L-040/L-041.",
612+
"scope": "project",
613+
"stack": [],
614+
"category": "security",
615+
"severity": "high",
616+
"source": "ADD",
617+
"date": "2026-06-14",
618+
"classified_by": "agent",
619+
"checkpoint_type": "retro"
620+
},
621+
{
622+
"id": "L-048",
623+
"title": "Whole-file allowlists in a security scan are blind spots; over-broad ones manufacture risk",
624+
"body": "The self-scan's first allowlist exempted 5 whole files \u2014 but 3 tripped nothing (pure blind spots) and the 2 real ones were auto-loaded behavioral content, so a critical payload planted in them would be BOTH invisible to the gate and injected into the agent. Fix: precise per-(file,pattern) waivers derived from a no-waiver scan, waiving only the exact patterns a file legitimately documents. An allowlist entry that waives more than what actually fires is a latent hole.",
625+
"scope": "project",
626+
"stack": [],
627+
"category": "security",
628+
"severity": "high",
629+
"source": "ADD",
630+
"date": "2026-06-14",
631+
"classified_by": "agent",
632+
"checkpoint_type": "retro"
633+
},
634+
{
635+
"id": "L-049",
636+
"title": "Independent per-wave verification catches what implementer self-testing structurally cannot",
637+
"body": "Across all waves the fresh adversarial verifier found real defects the implementer's own green tests missed: Wave 1's false-confidence string-match test, Wave 2's missing negative regression fixture, Wave 3's silently-disabled (?m) pattern. The implementer tests what they thought to test; the verifier tests the documented/boundary cases and reasons structurally. Keep the separate-verifier-per-wave discipline \u2014 it is not ceremony, it pays out every time.",
638+
"scope": "project",
639+
"stack": [],
640+
"category": "process",
641+
"severity": "medium",
642+
"source": "ADD",
643+
"date": "2026-06-14",
644+
"classified_by": "agent",
645+
"checkpoint_type": "retro"
607646
}
608647
]
609648
}

.github/workflows/guardrails.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ jobs:
5757
python-version: '3.12'
5858
- run: python3 scripts/validate-secret-patterns.py
5959

60+
skill-self-scan:
61+
name: Skill self-scan (ADD's own artifacts vs its injection patterns)
62+
runs-on: ubuntu-latest
63+
steps:
64+
- uses: actions/checkout@v5
65+
- uses: actions/setup-python@v6
66+
with:
67+
python-version: '3.12'
68+
- run: python3 scripts/self-scan-skills.py
69+
6070
# ---------- Fixture-based suites (bash + jq, no external tools) -------------
6171

6272
fixtures:
@@ -78,6 +88,7 @@ jobs:
7888
- rule-parity/test-rule-parity.sh
7989
- jq-dependency/test-jq-claim-qualified.sh
8090
- release-tooling/test-release-verify.sh
91+
- security/test-self-scan.sh
8192
steps:
8293
- uses: actions/checkout@v5
8394
- name: Install jq

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,25 @@ All notable changes to ADD are documented here. Format loosely follows [Keep a C
44

55
For commit-level detail see `git log`.
66

7+
## [0.9.7] — 2026-06-18
8+
9+
Methodology reframe + a security trust signal. Positions ADD as the policy layer over native orchestration, leads with the maturity-ladder moat, and dogfoods the injection defense.
10+
11+
### Changed
12+
13+
- **Swarm protocol reframed as policy over native Workflows.** `core/references/swarm-protocol.md` and `core/rules/agent-coordination.md` now draw a clear policy/mechanism line: ADD owns the *policy* (maturity-aware WIP/concurrency, conflict assessment, role briefs, merge ordering, trust-but-verify gates, swarm-state), and delegates the orchestration *mechanism* (parallel dispatch, worktree isolation, step schemas, budgets) to the runtime — native Claude Dynamic Workflows / Codex TOML sub-agents — with the manual recipes retained as the fallback. Positioning: "ADD configures native orchestration with maturity-aware policy," not "ADD re-implements orchestration." WIP semantics (poc=1…ga=5) and trust-but-verify are invariant; actual Workflow-descriptor emission is deferred to v1.1.
14+
- **README leads with the maturity ladder.** The hero is now the poc→alpha→beta→ga trust-gradient dial ("One dial scales the rigor") — the moat host runtimes haven't absorbed — with the prior framing kept as a secondary line.
15+
16+
### Added
17+
18+
- **Skill self-scan (`scripts/self-scan-skills.py`).** Runs ADD's distributed injection patterns (`core/security/patterns.json`) against ADD's own shipped artifacts on every CI run (the `skill-self-scan` guardrail), using the same detection engine as the runtime hook. Fails the build on any un-waived `critical`/`high` match and surfaces malformed patterns loudly so a pattern can't silently stop gating. Documented as a trust signal in SECURITY.md; guarded by `tests/security/test-self-scan.sh` (mutation-verified).
19+
- **Swarm-state format contract.** A machine-readable contract for `.add/swarm-state.md` (entry delimiter, field table, status enum, forward-compatible parsing) so humans, the orchestrator, and native-Workflow state all parse it the same way.
20+
- **`runtimes/claude/workflows/` scaffold** + `specs/workflow-lifecycle-scripts.md` (Draft) — the planned home for native Workflow lifecycle scripts. Inert in v0.9.7 (zero behavior change); pilot lands in v1.1.
21+
22+
### Changed (project governance)
23+
24+
- **GA gate updated:** the arbitrary 60-day beta calendar floor is dropped; v1.0 now gates on Anthropic marketplace approval plus the substantive promotion criteria (roadmap D7 override). See `docs/v1.0-roadmap.md` and `docs/milestones/v1.0-ga.md`.
25+
726
## [0.9.6] — 2026-06-14
827

928
CI/release hardening + truth-pass, opening the v1.0 credibility cycle. Turns a red `main` green, makes the release tool trustworthy, and fixes a real injection-defense bug surfaced during the pass.

README.md

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,39 @@
11
<h1 align="center">ADD — Agent Driven Development</h1>
22

33
<p align="center">
4-
<strong>AI agents write code fast. Without structure, they ship chaos.</strong>
4+
<strong>One dial scales the rigor. Trust your agents as much as your project has earned.</strong>
55
<br>
6-
ADD is a methodology for AI-native software development — spec-driven, test-first, independently verified, human-validated — implemented as a Claude Code plugin (with a Codex CLI adapter) that coordinates specialized agent swarms.
6+
ADD is a methodology for AI-native software development built around a single control: the <strong>maturity ladder</strong> (poc → alpha → beta → ga). The ladder governs everything — how deep your specs go, whether TDD is enforced, how many agents run in parallel, which quality gates block. A throwaway prototype gets near-zero ceremony; production infrastructure gets exhaustive verification. You turn one dial; ADD cascades the rest.
77
<br>
88
<br>
9-
<a href="https://getadd.dev">Website</a> · <a href="#install">Install</a> · <a href="#quick-start">Quick Start</a> · <a href="#coordinated-agent-teams">Agent Teams</a> · <a href="#human-in-the-loop">Human-in-the-Loop</a> · <a href="#for-product-managers">For PMs</a> · <a href="#cross-project-learning">Learning</a>
9+
<em>AI agents write code fast. Without structure, they ship chaos.</em> ADD brings the structure — spec-driven, test-first, independently verified, human-validated — implemented as a Claude Code plugin (with a Codex CLI adapter).
10+
<br>
11+
<br>
12+
<a href="https://getadd.dev">Website</a> · <a href="#the-maturity-ladder--one-dial-for-the-trust-gradient">Maturity Ladder</a> · <a href="#install">Install</a> · <a href="#quick-start">Quick Start</a> · <a href="#coordinated-agent-teams">Agent Teams</a> · <a href="#human-in-the-loop">Human-in-the-Loop</a> · <a href="#for-product-managers">For PMs</a> · <a href="#cross-project-learning">Learning</a>
1013
<br>
1114
<br>
1215
<a href="https://github.com/MountainUnicorn/add/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
13-
<a href="#"><img src="https://img.shields.io/badge/version-0.9.6-brightgreen.svg" alt="Version"></a>
16+
<a href="#"><img src="https://img.shields.io/badge/version-0.9.7-brightgreen.svg" alt="Version"></a>
1417
<a href="#"><img src="https://img.shields.io/badge/Claude_Code-plugin-blueviolet.svg" alt="Claude Code Plugin"></a>
1518
</p>
1619

1720
---
1821

22+
## The Maturity Ladder — one dial for the trust gradient
23+
24+
Autonomous agents need a trust gradient: how much you let them do should scale with how much your project has earned. ADD makes that gradient the master control. Every project declares a maturity level, and that level cascades to **every** process decision — no per-rule debates, just one dial.
25+
26+
| Stage | What it means | What ADD does |
27+
|-------|---------------|---------------|
28+
| **POC** | Validate an idea. Learning > completeness. | Paragraph PRD. Optional specs/TDD. Pre-commit gate only. 1 agent, serial. |
29+
| **Alpha** | Building toward MVP. Surviving first real usage. | 1-page PRD. Critical-path specs + TDD. Adds CI gate. Up to 2 agents. |
30+
| **Beta** | Broader audience. Stabilize, reduce defects. | Full PRD. All specs required, strict TDD. Adds pre-deploy gate. 2–4 agents. |
31+
| **GA** | Production-grade, long-term support. | Full PRD + architecture. Exhaustive ACs. All 5 gates blocking. 3–5 agents via worktrees. |
32+
33+
Promotion is **deliberate, not automatic**`/add:promote --check` runs an evidence-based gap analysis (specs, coverage, CI, branch protection) and tells you exactly what's missing before you level up. You don't graduate to GA by wishing; you graduate when the evidence says you're ready.
34+
35+
> This is the trust-gradient problem the 2026 agentic-coding discourse names as the central challenge of autonomous development — and ADD shipped an implementation of it.
36+
1937
## The Problem
2038

2139
AI code generation has changed how software gets built, but development practices haven't kept up. Developers and agents operate without structure, leading to specification drift, unpredictable quality, lost knowledge, and unclear handoffs.
@@ -24,11 +42,11 @@ AI code generation has changed how software gets built, but development practice
2442

2543
## What is Agent Driven Development?
2644

27-
**TDD** gave us tests before code. **BDD** gave us behavior before tests. **ADD** gives us *coordinated agent teams before everything*.
45+
**TDD** gave us tests before code. **BDD** gave us behavior before tests. **ADD** gives us *maturity-governed agent teams* — process rigor that scales with the trust your project has earned.
2846

2947
ADD is a structured SDLC methodology where AI agents do the development work — writing tests, implementing features, reviewing code, deploying — while humans architect, decide, and verify the user experience. It's not a tool. It's a way of working.
3048

31-
**The six principles:**
49+
**Maturity governs everything** — one dial (poc → alpha → beta → ga) scales all process rigor. On top of that master control, six principles:
3250

3351
1. **Specs before code** — Every feature starts as a specification. No spec, no code.
3452
2. **Tests before implementation** — Strict TDD: RED → GREEN → REFACTOR → VERIFY.

0 commit comments

Comments
 (0)