Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"name": "claude-code",
"source": "./plugins/claude-code",
"description": "Reference implementation of the Ironclad standard — multi-agent dev harness for Claude Code.",
"version": "0.9.0",
"version": "0.9.1",
"author": {
"name": "qwerfunch"
},
Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,31 @@ All notable changes to Cladding are documented here.
Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/).
Versioning: [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html).

## [0.9.1] — Adoption keeps approved capabilities + polyglot gate fidelity (2026-07-21)

**In one line:** adopting an existing project now keeps the capabilities you approved, and the gate reads and reports non-JavaScript projects more faithfully while nudging when the feature cycle isn't being driven.

### Fixed

- **Existing-project adoption keeps the capabilities you approved.** When you adopt a project that already has code, the capabilities produced and confirmed during onboarding are now written to `spec/capabilities.yaml`. Previously the observed-scan path re-derived them from README headings — or left `capabilities: []` when the repo had none — silently discarding the approved set. The greenfield path already honored them; the scan path now matches it. Conventions and architecture stay scanner-sourced.

### Gate and toolchain fidelity

- **The check-only formatters list every dirty file, not just the first.** `dart format` (and peers like `dotnet format`) print one changed-file line each; those aren't ESLint-shaped, so the lint stage used to collapse them to a single pathless finding — fix one, re-run, the next appears. Each dirty file now surfaces as its own finding with its path, plus a one-line `fix: run \`dart format .\`` hint.
- **Python projects run the test suite once per gate, not twice.** On pytest projects the unit stage and the coverage stage each spawned the whole suite (`pytest`, then `coverage run -m pytest`) — roughly doubling gate time. The unit stage now runs the coverage-instrumented suite once and shares it with the coverage stage, the same dedup vitest already had. The zero-executed-tests guard still applies on the shared pytest run, so the dedup can't turn a vacuous run green.
- **The header-comment convention check understands more languages.** It now recognises `#` comments and Python docstrings (`"""`, `'''`), not only `//` / `/*`.

### Feature-cycle signals

- **A non-blocking nudge when sustained source edits are bound to no feature.** When edits to files that no feature tracks accumulate past a small threshold, the post-edit card surfaces one advisory to start a feature — so the spec-first cycle gets triggered instead of silently skipped. Debounced and once-per-window; it never blocks.
- **`clad check` flags unenforced projects.** When a project has features not yet done but neither a git hook nor CI wires the gate, `clad check` prints one advisory that the checks run only when asked — with how to wire enforcement. Informational only; it never changes the exit status.
- **A cold-start signal when a project has code but no feature specs.** `clad check` and session start now say the spec-first cycle hasn't begun, instead of the project looking clean. Advisory only.
- **Onboarding hands off to authoring the first feature spec, not straight to code**, and writing code ahead of its spec is caught both at that handoff and at the resting state.

### Plain-language output

- **Soft-shell jargon leaks closed and enforcement tightened.** More user-facing output stays in plain words rather than internal cladding terms; the plain-language guard now also checks the finding lead line and forbids raw internal identifiers.

## [0.9.0] — Project-scoped natural-language onboarding (2026-07-16)

**In one line:** apply Cladding from ordinary conversation without a shell command, while project-local discovery, a read-only preview, an exact approval phrase, and atomic recovery keep onboarding bounded.
Expand Down
8 changes: 4 additions & 4 deletions README.html
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ <h1>cladding</h1>
<p class="badges">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests">
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests">
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"></a>
</p>
Expand Down Expand Up @@ -548,7 +548,7 @@ <h2>Status</h2>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
<div style="font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600">tests</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">2561<span style="font-size:16px;color:#94a3b8">/2561</span></div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">2602<span style="font-size:16px;color:#94a3b8">/2602</span></div>
<div style="font-size:11px;color:#64748b">all pass</div>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
Expand All @@ -558,8 +558,8 @@ <h2>Status</h2>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
<div style="font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600">features</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">255</div>
<div style="font-size:11px;color:#64748b">252 done · self-spec</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">261</div>
<div style="font-size:11px;color:#64748b">258 done · self-spec</div>
</td>
</tr>
</table>
Expand Down
4 changes: 2 additions & 2 deletions README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<p align="center">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"/></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"/></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors"/>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"/></a>
</p>
Expand Down Expand Up @@ -339,7 +339,7 @@ clad update # 3. プロジェクト接続と派生状態を更新

| Version | 準拠レベル | Tests | Gate | Features |
|---|---|---|---|---|
| v0.9.0(2026-07) | L4 · [自己申告](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2561 / 2561 | 15 段階 · 41 detectors | 255(252 done) |
| v0.9.0(2026-07) | L4 · [自己申告](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2602 / 2602 | 15 段階 · 41 detectors | 261(258 done) |

<sub>236 test files · capability 6 個 · カバレッジ低下は COVERAGE_DROP detector がブロック</sub>

Expand Down
8 changes: 4 additions & 4 deletions README.ko.html
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ <h1>cladding</h1>
<p class="badges">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests">
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests">
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors">
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"></a>
</p>
Expand Down Expand Up @@ -584,7 +584,7 @@ <h2>Status</h2>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
<div style="font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600">tests</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">2561<span style="font-size:16px;color:#94a3b8">/2561</span></div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">2602<span style="font-size:16px;color:#94a3b8">/2602</span></div>
<div style="font-size:11px;color:#64748b">all pass</div>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
Expand All @@ -594,8 +594,8 @@ <h2>Status</h2>
</td>
<td style="text-align:center;width:140px;background:#f8fafc;padding:18px 10px;border-radius:8px;border:none">
<div style="font-size:11px;color:#64748b;letter-spacing:1.5px;text-transform:uppercase;font-weight:600">features</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">255</div>
<div style="font-size:11px;color:#64748b">252 done · 자기 스펙</div>
<div style="font-size:24px;font-weight:800;color:#0f172a;margin:8px 0;letter-spacing:-0.5px">261</div>
<div style="font-size:11px;color:#64748b">258 done · 자기 스펙</div>
</td>
</tr>
</table>
Expand Down
4 changes: 2 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<p align="center">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"/></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"/></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors"/>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"/></a>
</p>
Expand Down Expand Up @@ -338,7 +338,7 @@ clad update # 3. 프로젝트 연결과 파생 데이터를 함께

| version | 준수 등급 | tests | gate | features |
|---|---|---|---|---|
| v0.9.0 · 2026-07 | L4 · [L0–L4 중 최고 · 자가 선언](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2561 / 2561 · all pass | 15 단계 · 41 detectors | 255 · 252 done · 자기 스펙 |
| v0.9.0 · 2026-07 | L4 · [L0–L4 중 최고 · 자가 선언](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2602 / 2602 · all pass | 15 단계 · 41 detectors | 261 · 258 done · 자기 스펙 |

<sub>236 test files · capability 6개 · coverage는 COVERAGE_DROP detector가 하락 차단</sub>

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<p align="center">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"/></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"/></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors"/>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"/></a>
</p>
Expand Down Expand Up @@ -352,7 +352,7 @@ Reconcile the drift the update flagged.

| Version | Conformance | Tests | Gate | Features |
|---|---|---|---|---|
| v0.9.0 (2026-07) | L4 · [self-declared](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2561 / 2561 | 15 stages · 41 detectors | 255 (252 done) |
| v0.9.0 (2026-07) | L4 · [self-declared](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2602 / 2602 | 15 stages · 41 detectors | 261 (258 done) |

<sub>236 test files · 6 capabilities · coverage drop blocked by the COVERAGE_DROP detector</sub>

Expand Down
4 changes: 2 additions & 2 deletions README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<p align="center">
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/ironclad-L4%20conformant-brightgreen" alt="ironclad"/></a>
<a href="https://github.com/qwerfunch/ironclad"><img src="https://img.shields.io/badge/spec-v0.0.23-blue" alt="spec"/></a>
<img src="https://img.shields.io/badge/tests-2561%2F2561-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/tests-2602%2F2602-brightgreen" alt="tests"/>
<img src="https://img.shields.io/badge/detectors-41-brightgreen" alt="detectors"/>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-lightgrey" alt="license"/></a>
</p>
Expand Down Expand Up @@ -335,7 +335,7 @@ clad update # 3. 刷新项目连接和派生状态

| 版本 | 一致性 | Tests | Gate | Features |
|---|---|---|---|---|
| v0.9.0(2026-07) | L4 · [自我声明](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2561 / 2561 | 15 阶段 · 41 检测器 | 255(252 done) |
| v0.9.0(2026-07) | L4 · [自我声明](https://github.com/qwerfunch/ironclad/blob/main/GOVERNANCE.md) | 2602 / 2602 | 15 阶段 · 41 检测器 | 261(258 done) |

<sub>236 个测试文件 · 6 项 capability · 覆盖率下降由 COVERAGE_DROP 检测器拦下</sub>

Expand Down
10 changes: 5 additions & 5 deletions docs/ab-evaluation/case-existing-adoption.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ No spec, no architecture invariants — just code on the existing tree.
| Test files | 1 | 1 | +0 |
| Test LoC | 14 | 14 | +0 |
| Test cases | 1 | 1 | +0 |
| Total chars (artifacts + code) | 11268 | 3864 | +7404 |
| Estimated tokens | 2819 | 967 | +1852 |
| Total chars (artifacts + code) | 11104 | 3864 | +7240 |
| Estimated tokens | 2778 | 967 | +1811 |

**Detector outcomes** (META_INTEGRITY + HARDCODED_SECRET excluded — toolchain-only checks):

Expand Down Expand Up @@ -90,8 +90,8 @@ B (Vanilla) — errors: 1 warns: 3 infos: 28
| Test files | 2 | 2 | +0 |
| Test LoC | 27 | 27 | +0 |
| Test cases | 3 | 3 | +0 |
| Total chars (artifacts + code) | 12811 | 5115 | +7696 |
| Estimated tokens | 3205 | 1280 | +1925 |
| Total chars (artifacts + code) | 12624 | 5115 | +7509 |
| Estimated tokens | 3158 | 1280 | +1878 |

**Detector outcomes** (META_INTEGRITY + HARDCODED_SECRET excluded — toolchain-only checks):

Expand All @@ -111,7 +111,7 @@ B (Vanilla) — errors: 1 warns: 3 infos: 28
- **Spec ↔ code traceability**: cladding emits 1 feature(s), 2 AC(s), 1 scenario(s), 3 capability(s); vanilla has 0 of each.
- **Architecture enforcement**: cladding declares 3 layer(s) with 0 forbidden-import rule(s); vanilla has 0.
- **Detector behavior**: cladding-managed tree → 1 error(s) / 1 warn(s) / 11 info(s). Vanilla tree → 1 / 3 / 28. The detectors that gate against spec (REFERENCE_INTEGRITY, MISSING_IMPLEMENTATION, ARCHITECTURE_FROM_SPEC, CAPABILITIES_FEATURE_MAPPING) need cladding's artifacts to evaluate — without them they silently pass. The "0 errors on vanilla" therefore is **absence of signal**, not absence of drift.
- **Token cost**: cladding's cumulative artifact + code consumes ~3205 tokens vs vanilla's ~1280 (heuristic chars/4) — Δ ≈ 1925 tokens, the price of structure.
- **Token cost**: cladding's cumulative artifact + code consumes ~3158 tokens vs vanilla's ~1280 (heuristic chars/4) — Δ ≈ 1878 tokens, the price of structure.
- **Code surface**: vanilla writes 9 source file(s) / 144 LoC + 2 test file(s) / 3 test case(s); cladding writes 9 / 128 + 2 / 3. (Vanilla front-loads code, cladding front-loads spec — both converge by M2.)

## Outcome Quality (F-ba2e05)
Expand Down
10 changes: 5 additions & 5 deletions docs/ab-evaluation/case-payment-saas.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ no spec, no scenarios, no architecture invariants.
| Test files | 0 | 1 | -1 |
| Test LoC | 0 | 20 | -20 |
| Test cases | 0 | 2 | -2 |
| Total chars (artifacts + code) | 6708 | 3463 | +3245 |
| Estimated tokens | 1679 | 867 | +812 |
| Total chars (artifacts + code) | 6600 | 3463 | +3137 |
| Estimated tokens | 1652 | 867 | +785 |

**Detector outcomes** (META_INTEGRITY + HARDCODED_SECRET excluded — toolchain-only checks):

Expand Down Expand Up @@ -89,8 +89,8 @@ B (Vanilla) — errors: 1 warns: 3 infos: 28
| Test files | 1 | 2 | -1 |
| Test LoC | 8 | 33 | -25 |
| Test cases | 1 | 4 | -3 |
| Total chars (artifacts + code) | 7872 | 5592 | +2280 |
| Estimated tokens | 1970 | 1399 | +571 |
| Total chars (artifacts + code) | 7764 | 5592 | +2172 |
| Estimated tokens | 1943 | 1399 | +544 |

**Detector outcomes** (META_INTEGRITY + HARDCODED_SECRET excluded — toolchain-only checks):

Expand All @@ -110,7 +110,7 @@ B (Vanilla) — errors: 1 warns: 3 infos: 28
- **Spec ↔ code traceability**: cladding emits 1 feature(s), 2 AC(s), 2 scenario(s), 3 capability(s); vanilla has 0 of each.
- **Architecture enforcement**: cladding declares 3 layer(s) with 2 forbidden-import rule(s); vanilla has 0.
- **Detector behavior**: cladding-managed tree → 1 error(s) / 3 warn(s) / 15 info(s). Vanilla tree → 1 / 3 / 28. The detectors that gate against spec (REFERENCE_INTEGRITY, MISSING_IMPLEMENTATION, ARCHITECTURE_FROM_SPEC, CAPABILITIES_FEATURE_MAPPING) need cladding's artifacts to evaluate — without them they silently pass. The "0 errors on vanilla" therefore is **absence of signal**, not absence of drift.
- **Token cost**: cladding's cumulative artifact + code consumes ~1970 tokens vs vanilla's ~1399 (heuristic chars/4) — Δ ≈ 571 tokens, the price of structure.
- **Token cost**: cladding's cumulative artifact + code consumes ~1943 tokens vs vanilla's ~1399 (heuristic chars/4) — Δ ≈ 544 tokens, the price of structure.
- **Code surface**: vanilla writes 5 source file(s) / 126 LoC + 2 test file(s) / 4 test case(s); cladding writes 1 / 11 + 1 / 1. (Vanilla front-loads code, cladding front-loads spec — both converge by M2.)

## Outcome Quality (F-ba2e05)
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cladding",
"version": "0.9.0",
"version": "0.9.1",
"description": "Spec-driven verification layer for AI coding agents — Claude Code · Codex · Gemini · Antigravity · Cursor. Intent in before it writes, result verified against your spec after. Reference implementation of the Ironclad standard.",
"type": "module",
"license": "MIT",
Expand Down
Loading
Loading