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/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "ai-native-sdlc",
"displayName": "AI-Native SDLC",
"version": "0.5.0",
"version": "0.5.1",
"description": "Lean, risk-sized, artifact-driven software delivery for Claude Code.",
"author": {
"name": "AI-Native SDLC Contributors"
Expand Down
2 changes: 1 addition & 1 deletion .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ai-native-sdlc",
"version": "0.5.0",
"version": "0.5.1",
"description": "Lean, risk-sized, artifact-driven software delivery for Codex and Claude Code.",
"author": {
"name": "AI-Native SDLC Contributors"
Expand Down
1 change: 1 addition & 0 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ This plugin uses original wording and implementation-neutral workflow ideas info
- Garry Tan and contributors, [G-STACK](https://github.com/garrytan/gstack), MIT License.
- Dietrich Gebert and contributors, [Ponytail](https://github.com/dietrichgebert/ponytail), MIT License.
- Julius Brussee and contributors, [Caveman](https://github.com/juliusbrussee/caveman), MIT License for skills and adoption surfaces. Engine-linked runtime components use BSL-1.1 and are not bundled here.
- Samir Sawarkar, [asd-ste100-skill](https://github.com/samirsawarkar/asd-ste100-skill), MIT License. Clarity rules are informed by ASD-STE100 Simplified Technical English, a specification of ASD (AeroSpace and Defence Industries Association of Europe); this plugin does not claim ASD-STE100 compliance.

The plugin is not affiliated with or endorsed by those projects. No third-party code is bundled.
14 changes: 14 additions & 0 deletions docs/changelogs/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

## 0.5.1 - 2026-10-08

- Verification: the full 12-case behavior suite ran with independent transcript review on three hosts: Claude Code 2.1.294 with `claude-sonnet-5` and `claude-sonnet-5-5`, and Codex 0.160.1 with `gpt-6.1-sol`. Codex used `gpt-6.1-sol`, not the `gpt-6-astra` used for 0.5.0. Results were 9/12, 12/12, and 12/12. All filesystem and executable acceptance checks passed. Reviewers attributed none of the three `claude-sonnet-5` failures to this release:
- `typo` skipped its diff check, a known 0.5.0 limit.
- `payment` did not name the human checkpoint-1 approval still needed. An earlier run with the same gap was scored as a pass.
- `payment-build` skipped the separate test author and dispatched reviewers directly. The 0.5.0 limit "the separate test author is skipped in some Claude Code runs" still applies.
- Earlier runs of this release, before the fixes below, scored 10/12, 11/12, and 11/12, and `qualification` failed on every host.
- The final checklist scoping and the "model cost" wording were checked only on Claude Code. On Codex the scoping check could not run, because Windows cancelled the elevated sandbox helper (error 1223).
- The acceptance-criteria rule produced no banned terms, but some `payment-build` criteria still bundle several conditions. No run used `WARNING:` or `CAUTION:`, and no run read `economy.md`, so the economy.md rules are untested.
- Added clarity rules to artifact-contracts.md and economy.md, informed by ASD-STE100 Simplified Technical English via asd-ste100-skill (MIT License). Wording only; no linter or compliance tool. See ADR-004.
- Fixed the `qualification` behavior case, which failed on every host. The model-selection reference now lists the evidence a model qualification claim needs as a checklist, and an assessment of a model qualification claim reports each item as present or missing. The list is skipped when no one claims a model is qualified, because some runs had attached it to `model-override`. The router now reads that reference before answering any model-selection, qualification, or cost question, including read-only work; one run had skipped it.
- The router skill now also activates for read-only reviews of model selection, model qualification claims, or model cost, and whenever the user asks to use ai-native-sdlc. In 3 of 4 earlier Claude Code runs, `model-override` had skipped the plugin as read-only. After the change it activated in 8 of 8 runs across `claude-sonnet-5` and `claude-sonnet-5-5`. Six unrelated cost questions about cloud hosting and budgets were also tried across both models, and none activated the plugin.
- Fixed the guard hook leaving the transcript file open after reading it (`ResourceWarning` in `hooks/edit_guard.py`).

## 0.5.0 - 2026-10-03

- Verification at release: the full 12-case behavior suite ran on Claude Code (`claude-sonnet-5`) and Codex (`gpt-6-astra`) with independent transcript review, plus targeted re-runs after the final fixes. Known limits: `claude-sonnet-5-5` is not yet qualified for Controlled work; the separate test author is skipped in some Claude Code runs; the guard hook is Claude Code only; on Claude Code, `typo`, `payment`, `model-override`, `qualification`, and `cost-retry` missed parts of the rubric in the last full suite run; the visual gate and workspace marketplace import were not tested.
Expand Down
29 changes: 29 additions & 0 deletions docs/tracking/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,32 @@ The hook is registered from `.claude-plugin/` and not from the default `hooks/ho
- **More instruction rewording.** Costly, and compliance stays probabilistic.
- **Marking `claude-sonnet-5-5` unsupported and stopping.** The README label already does this, but it leaves default-Sonnet users without protection.
- **A model-judged hook** that asks a small model whether an edit is high-risk. It cannot read `state.md` from a yes/no prompt, and the deterministic check already covers the failures seen.

## ADR-004: Add STE-informed clarity rules as wording only (2026-10-07)

### Status

Accepted (2026-10-07).

### Context

Specification acceptance criteria, plan steps, evidence, and PR text are approved by humans and executed by agents. The asd-ste100-skill repo offers "80% ASD-STE100" structural rules plus a regex linter. No behavior run or incident on record shows vague wording causing a failure; all recorded failures were gate compliance. The change is preventive.

### Decision

Add clarity rule sets to artifact-contracts.md and economy.md as wording only. No new skill, file, or script. Two rule sets: acceptance criteria state one testable condition each and avoid `should`, `appropriate`, `as needed`, `etc.`, `TBD`, `and/or` (quoted UI copy and code exempt); output budget in economy.md: one action per step in active voice, one term per thing, never upgrade a hedge (`may`, `likely`, `not verified`) to a fact, risky steps marked `WARNING:`/`CAUTION:` with command first and reason second.

### Consequences

Compliance is instruction-only and therefore probabilistic (see ADR-003). No new runtime dependency. Verify and ship already cover limitations and rollback, so they are unchanged.

### Alternatives rejected

- **(a) An agent-run linter script** — an agent in a user's repository cannot reliably resolve the plugin's script path, it would add a Python runtime dependency on Codex, and an agent-invoked check holds no better than wording (ADR-003); an advisory linter was first chosen, then dropped after an independent review.
- **(b) The ASD-STE100 approved-word dictionary** — domain terms must stay.
- **(c) Hard word caps of 20/25 words** — precise acceptance criteria need room.
- **(d) The source repo's diagram, HTML, and video output tiers** — outside an SDLC plugin's scope.

### Revisit when

A behavior transcript shows a vague acceptance criterion or an upgraded hedge passing a gate. Then add a non-blocking check to `hooks/edit_guard.py` on writes to `.sdlc/changes/*/spec.md`.
17 changes: 9 additions & 8 deletions hooks/edit_guard.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,15 @@ def decide(aEvent):
return None
texts, routed = [], False
try:
for line in open(aEvent.get('transcript_path') or '', encoding='utf-8', errors='replace'):
routed = routed or 'ai-native-sdlc:ai-native-' in line
try:
entry = json.loads(line)
except ValueError:
continue
if entry.get('type') == 'assistant':
texts += [c.get('text', '') for c in entry['message'].get('content', []) if c.get('type') == 'text']
with open(aEvent.get('transcript_path') or '', encoding='utf-8', errors='replace') as transcript:
for line in transcript:
routed = routed or 'ai-native-sdlc:ai-native-' in line
try:
entry = json.loads(line)
except ValueError:
continue
if entry.get('type') == 'assistant':
texts += [c.get('text', '') for c in entry['message'].get('content', []) if c.get('type') == 'text']
except OSError:
return None
if not routed:
Expand Down
4 changes: 2 additions & 2 deletions skills/ai-native-sdlc/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: ai-native-sdlc
description: Route software work through a risk-sized AI-native lifecycle from intent to operations. Use for end-to-end features, fixes, delivery workflows, or resuming a change with existing SDLC artifacts.
description: Route software work through a risk-sized AI-native lifecycle from intent to operations. Use for end-to-end features, fixes, delivery workflows, resuming a change with existing SDLC artifacts, and read-only reviews of model selection, model qualification claims, or model cost. Use whenever the user asks to use ai-native-sdlc.
---

# AI-Native SDLC
Expand All @@ -15,7 +15,7 @@ When a leaf skill opened this file, use only its lane and invariants. Do not rou
2. Restate the requested outcome, explicit boundaries, and assumptions. Do not widen authorization.
3. Choose the lane. Fast means small, reversible, clear, and no security, privacy, money, migration, production, destructive, or cross-service effect. Controlled means any of those risks. Standard covers the middle, including bounded features, ordinary bugs, and any request that asks for a plan or specification. A risk signal you cannot rule out after reading the relevant code counts as present. Size never lowers the lane. Standard and Controlled work edit no code until `state.md` records a `plan` approval (Controlled also needs `intent` and `design` approvals); a small or fully specified task, a request that already authorizes implementation, or a general instruction to avoid extra files does not waive this. Read [operating-model.md](references/operating-model.md) only for Standard, Controlled, or unclear classification.
4. Use the first sufficient option: skip speculative work, reuse existing code, use the standard library, use a native feature, use an installed dependency, then write minimum new code. Keep small, tightly coupled work local unless applicable instructions require delegation. Read [economy.md](references/economy.md) for Standard or Controlled work, complex context, substantial output, or before delegating.
5. If `.sdlc/changes/*/state.md` identifies this work, resume its `next_action`; do not restart the lifecycle. For model selection, model qualification claims, or cost comparisons, read [model-selection.md](references/model-selection.md).
5. If `.sdlc/changes/*/state.md` identifies this work, resume its `next_action`; do not restart the lifecycle. For model selection, model qualification claims, or cost comparisons, read [model-selection.md](references/model-selection.md) before answering, including read-only and Fast work.
6. For Fast work, stay inline: state the short plan, make the smallest authorized edit, inspect the diff, run focused proof, and report fresh evidence. Use `ai-native-debug` first only when the cause is unknown. Do not create lifecycle files.
7. For Standard or Controlled work, invoke only the next matching skill through the host's skill mechanism; never do a leaf skill's work from this router:
- unclear outcome, new product behavior, no `spec.md` yet, or Controlled work without an approved `intent.md` -> `ai-native-shape`; a plan-only request still gets draft `spec.md` and `plan.md`, with nothing marked accepted and the approvals still needed listed
Expand Down
2 changes: 1 addition & 1 deletion skills/ai-native-sdlc/references/artifact-contracts.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Store Standard and Controlled work under `.sdlc/changes/<slug>/`. Use existing r
- Reference oracle: the design, document, or implementation the result must match, or `none`; never the code whose behavior this change alters
- Required behavior and non-goals
- Interfaces, data flow, trust boundaries, and failure behavior
- Acceptance criteria with stable IDs such as `AC-1`
- Acceptance criteria with stable IDs such as `AC-1`; each criterion states one testable condition and avoids `should`, `appropriate`, `as needed`, `etc.`, `TBD`, and `and/or` (quoted UI copy and code are exempt)
- Policy conflicts, decisions, and unresolved risks
- Rollout and observability needs

Expand Down
1 change: 1 addition & 0 deletions skills/ai-native-sdlc/references/economy.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ Never simplify away trust-boundary validation, security, privacy, accessibility,
- Lead with the result. Use one short sentence per fact and stable technical terms.
- Remove pleasantries, repeated restatement, narration, speculative tours, and conclusions already implied by evidence.
- Preserve exact code, commands, file paths, errors, names, versions, dates, numbers, units, and words such as `not`, `never`, `only`, and `except`.
- Write one action per step in active voice. Use one term per thing; never rotate synonyms. Never upgrade a hedge such as `may`, `likely`, or `not verified` to a fact. Mark a risky step `WARNING:` (data loss or security) or `CAUTION:` (recoverable harm), command first, reason second.
- Do not invent abbreviations or damage grammar for cosmetic brevity.
- Expand when compression could obscure a security warning, irreversible action, ordered procedure, architectural disagreement, or requested explanation.

Expand Down
13 changes: 12 additions & 1 deletion skills/ai-native-sdlc/references/model-selection.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,18 @@ Read when selecting a worker model, considering a model change, evaluating model

## Qualify models and cheaper defaults

Use an existing evaluation or evidence record, not a new runtime database. For any model qualification claim, including a cheaper default, require task class; exact model/version and effort; host/tools/context; baseline; acceptance and review criteria; dated evidence; paired failures; and complete cost with its billing basis. Fast work stays inline; do not create lifecycle files just to record a selection.
Use an existing evaluation or evidence record, not a new runtime database. A model qualification claim, including a cheaper default, needs every item below. When you assess a model qualification claim, report each item by name as present or missing. Skip this list when no one claims a model is qualified.

- task class
- exact model/version and effort
- host, tools, and context
- baseline
- acceptance and review criteria
- dated evidence
- paired failures
- complete cost with its billing basis

Fast work stays inline; do not create lifecycle files just to record a selection.

Before enabling a cheaper default, compare exact configurations on held-out representative tasks with repeated runs and equal tools, permissions, acceptance, and final verification. Examine baseline-success/candidate-failure cases, critical defects, and each task class separately from aggregate scores. Choose sample size for the required assurance; smoke fixtures do not qualify models. Report uncertainty and failed attempts, not only successful calls. No quality-loss tolerance is introduced by this policy.

Expand Down
Loading