@mdferdousalam/agentic-sdlc 0.0.0-stage → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +11 -0
- package/.claude-plugin/plugin.json +31 -0
- package/CHANGELOG.md +330 -0
- package/GETTING-STARTED.md +174 -0
- package/LICENSE +21 -0
- package/README.md +268 -2
- package/SECURITY.md +25 -0
- package/agents/sdlc-architecture-reviewer.md +71 -0
- package/agents/sdlc-branch-opener.md +83 -0
- package/agents/sdlc-code-reviewer.md +62 -0
- package/agents/sdlc-impact-analyst.md +70 -0
- package/agents/sdlc-implementer.md +60 -0
- package/agents/sdlc-lander.md +40 -0
- package/agents/sdlc-readiness-gate.md +128 -0
- package/agents/sdlc-release-manager.md +76 -0
- package/agents/sdlc-remediator.md +89 -0
- package/agents/sdlc-reporter.md +42 -0
- package/agents/sdlc-security-reviewer.md +62 -0
- package/agents/sdlc-spec-reviewer.md +56 -0
- package/agents/sdlc-spec-writer.md +62 -0
- package/agents/sdlc-test-author.md +32 -0
- package/agents/sdlc-triager.md +48 -0
- package/agents/sdlc-verifier.md +69 -0
- package/bin/__pycache__/sdlccpython-315.pyc +0 -0
- package/bin/sdlc +2747 -0
- package/bin/sdlc-install-opencode +10 -0
- package/commands/doctor.md +9 -0
- package/commands/feature.md +17 -0
- package/commands/gate.md +33 -0
- package/commands/impact.md +13 -0
- package/commands/implement.md +11 -0
- package/commands/init.md +15 -0
- package/commands/land.md +10 -0
- package/commands/metrics.md +12 -0
- package/commands/readiness.md +8 -0
- package/commands/release.md +16 -0
- package/commands/remediate.md +13 -0
- package/commands/report.md +11 -0
- package/commands/review.md +12 -0
- package/commands/status.md +9 -0
- package/commands/trace.md +9 -0
- package/commands/triage.md +14 -0
- package/commands/verify.md +10 -0
- package/docs/compliance.md +70 -0
- package/docs/configuration.md +106 -0
- package/docs/control-spec.md +269 -0
- package/docs/install.md +75 -0
- package/docs/maturity.md +129 -0
- package/docs/opencode.md +45 -0
- package/docs/openspec.md +58 -0
- package/docs/pipeline.md +160 -0
- package/docs/platforms.md +99 -0
- package/docs/rules.md +122 -0
- package/evals/baseline-attributes-failure/graders/criteria.md +18 -0
- package/evals/baseline-attributes-failure/prompt.md +23 -0
- package/evals/budget-stops-rather-than-asks/graders/criteria.md +19 -0
- package/evals/budget-stops-rather-than-asks/prompt.md +14 -0
- package/evals/critical-low-confidence-escalates/graders/criteria.md +22 -0
- package/evals/critical-low-confidence-escalates/prompt.md +17 -0
- package/evals/gate-refuses-unexecuted/graders/criteria.md +16 -0
- package/evals/gate-refuses-unexecuted/prompt.md +15 -0
- package/evals/refusal-is-not-negotiated/graders/criteria.md +17 -0
- package/evals/refusal-is-not-negotiated/prompt.md +7 -0
- package/evals/release-needs-rollback-and-approval/graders/criteria.md +15 -0
- package/evals/release-needs-rollback-and-approval/prompt.md +6 -0
- package/evals/remediator-refuses-weakened-test/graders/criteria.md +20 -0
- package/evals/remediator-refuses-weakened-test/prompt.md +33 -0
- package/evals/spec-review-catches-unfalsifiable/graders/criteria.md +17 -0
- package/evals/spec-review-catches-unfalsifiable/prompt.md +17 -0
- package/examples/worked-example.md +131 -0
- package/hooks/hooks.json +16 -0
- package/npm/cli.js +35 -0
- package/opencode/plugin/agentic-sdlc.ts +52 -0
- package/package.json +59 -4
- package/profiles/README.md +52 -0
- package/profiles/compiler.md +33 -0
- package/profiles/concerns/architecture.md +50 -0
- package/profiles/concerns/concurrency.md +59 -0
- package/profiles/concerns/data.md +62 -0
- package/profiles/concerns/memory.md +52 -0
- package/profiles/concerns/performance.md +54 -0
- package/profiles/concerns/platform.md +62 -0
- package/profiles/library.md +31 -0
- package/profiles/service.md +32 -0
- package/profiles/webapp.md +40 -0
- package/schema/finding.schema.json +267 -0
- package/schema/sdlc.config.schema.json +324 -0
- package/skills/agentic-sdlc-pipeline/SKILL.md +66 -0
- package/skills/openspec-with-sdlc/SKILL.md +56 -0
- package/skills/writing-specifications/SKILL.md +51 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentic-sdlc",
|
|
3
|
+
"owner": { "name": "Engr Md Ferdous Alam", "email": "mdferdousalam1989@yahoo.com", "url": "https://github.com/mdferdousalam" },
|
|
4
|
+
"plugins": [
|
|
5
|
+
{
|
|
6
|
+
"name": "agentic-sdlc",
|
|
7
|
+
"source": "./",
|
|
8
|
+
"description": "An enforced agent-based SDLC pipeline: specify, review, branch, implement, verify, review, gate, land, report — each stage owned by one agent and closed by a receipt a hook checks. Stack-agnostic; speaks OpenSpec or PRD/FRD."
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "agentic-sdlc",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "An enforced agent-based SDLC pipeline that runs on any coding agent: specify, review, branch, implement, verify, review, gate, land, release. Each stage is owned by one agent and closed by a receipt bound to a commit. Claude Code, opencode, Codex and Cline refuse a skipped stage at the tool call; Gemini denies by policy; Cursor, Copilot, Windsurf and 20+ AGENTS.md hosts get the pipeline plus git-hook and CI enforcement. One adapter file per project; speaks OpenSpec or PRD/FRD.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"sdlc",
|
|
7
|
+
"pipeline",
|
|
8
|
+
"agents",
|
|
9
|
+
"openspec",
|
|
10
|
+
"code-review",
|
|
11
|
+
"quality-gate",
|
|
12
|
+
"spec-driven",
|
|
13
|
+
"hooks",
|
|
14
|
+
"governance",
|
|
15
|
+
"cursor",
|
|
16
|
+
"codex",
|
|
17
|
+
"gemini",
|
|
18
|
+
"copilot",
|
|
19
|
+
"cline",
|
|
20
|
+
"opencode",
|
|
21
|
+
"agents-md"
|
|
22
|
+
],
|
|
23
|
+
"author": {
|
|
24
|
+
"name": "Engr Md Ferdous Alam",
|
|
25
|
+
"email": "mdferdousalam1989@yahoo.com",
|
|
26
|
+
"url": "https://github.com/mdferdousalam"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/mdferdousalam/agentic-sdlc",
|
|
29
|
+
"repository": "https://github.com/mdferdousalam/agentic-sdlc",
|
|
30
|
+
"license": "MIT"
|
|
31
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this plugin. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
4
|
+
and the versioning is [semantic](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
## [3.0.0] — 2026-10-25
|
|
7
|
+
|
|
8
|
+
Findings become data, the gate can no longer be lowered to pass itself, and the six taxonomy
|
|
9
|
+
domains the reviewers were silent on are covered.
|
|
10
|
+
|
|
11
|
+
**Major, because the gate got stricter.** Nothing was removed and no configuration key
|
|
12
|
+
changed meaning, but three things that previously passed now block: a configured
|
|
13
|
+
`quality.cmd` actually runs, a diff that weakens the test suite is refused, and a budget
|
|
14
|
+
ceiling stops a task. A repository that was green on 2.3.0 may not be green on this. That is
|
|
15
|
+
the point, and it is a narrowing, so it is a major.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **A finding contract.** `schema/finding.schema.json` and `sdlc finding write|list|show|close`.
|
|
20
|
+
A finding now carries an identity, a rule, a taxonomy address, evidence, a root cause, a
|
|
21
|
+
verification plan and a provenance — not just the word "blocking". Findings deduplicate by
|
|
22
|
+
content, so the same one raised twice is one finding rather than two comments.
|
|
23
|
+
- **`docs/control-spec.md`**, normative for every agent: the four vocabularies, the repair
|
|
24
|
+
policy, the A–U and X1–X12 coverage map with an honest `review-level` marker, and a table of
|
|
25
|
+
56 rules. A rule that lives only in a prompt is that agent's opinion, and `sdlc finding
|
|
26
|
+
write` refuses a rule the table does not list.
|
|
27
|
+
- **Severity and confidence as independent axes.** What an agent may repair unattended comes
|
|
28
|
+
from the pair, never from severity alone: `critical` at `low` confidence escalates to a
|
|
29
|
+
person, `high` at `medium` needs a reproduction first, and `advisory` is never committed at
|
|
30
|
+
any confidence.
|
|
31
|
+
- **`sdlc baseline capture|compare|show`.** The branch-opener records what the verify command
|
|
32
|
+
said *before* any work began; the verifier and gate classify every later failure as `new`,
|
|
33
|
+
`pre-existing` or `fixed`. Comparison is over normalised signal lines, so it works in any
|
|
34
|
+
stack without a parser per test runner. Keyed to the merge base, so it survives commits —
|
|
35
|
+
unlike a receipt, which must not.
|
|
36
|
+
- **`sdlc tests audit`.** Deleted test files, removed assertions, new skip markers, new
|
|
37
|
+
suppression directives and lowered thresholds. Every agent prompt already forbade these;
|
|
38
|
+
this is the part that does not negotiate. `--acknowledge` records a human decision and
|
|
39
|
+
deliberately does not waive the finding.
|
|
40
|
+
- **`budget`.** `maxToolCalls` and `maxWallClockMin`, refused at the tool call and resettable
|
|
41
|
+
only by a person.
|
|
42
|
+
- **`sdlc checkpoint write|resume|show`.** Stores a long task's progress *and the repository
|
|
43
|
+
state it assumed*; `resume` re-validates branch, commit ancestry, file digests and toolchain
|
|
44
|
+
before saying it is safe to continue.
|
|
45
|
+
- **`concerns`**, a second profile axis beside `profile`. Six cross-cutting profiles —
|
|
46
|
+
`architecture`, `performance`, `memory`, `concurrency`, `data`, `platform` — covering
|
|
47
|
+
taxonomy domains B, E, F, G, J, K, N and S. A Go service wants `service` *and*
|
|
48
|
+
`concurrency`, which one field could not express. `sdlc init` proposes them from what the
|
|
49
|
+
repository actually contains and never imposes one.
|
|
50
|
+
- **`sdlc-impact-analyst`** and **`sdlc-architecture-reviewer`**, both read-only. The first
|
|
51
|
+
reports dependents, published shapes and ordered migration steps *before* implementation;
|
|
52
|
+
the second walks the import graph, which is a different search from reading a diff.
|
|
53
|
+
- **Environment fingerprint on every receipt**, so an environmental failure is distinguishable
|
|
54
|
+
from a defect.
|
|
55
|
+
- **Metrics that measure outcomes**, not just activity: findings by severity and taxonomy
|
|
56
|
+
domain, verified repair rate, false-fix rate, human-intervention rate and reproducible
|
|
57
|
+
share.
|
|
58
|
+
- Four evals for the new refusals, and tests for every detection in both directions.
|
|
59
|
+
|
|
60
|
+
- **Publishing runs from a GitHub release, over OIDC.** `.github/workflows/publish.yml`
|
|
61
|
+
authenticates with npm Trusted Publishing — no stored token, no one-time password, and
|
|
62
|
+
provenance attached automatically. The trigger is a published release, so cutting one
|
|
63
|
+
stays the maintainer's act and the workflow is only the hands that carry it out; it
|
|
64
|
+
refuses if the tag and `package.json` disagree, and re-runs the gate rather than
|
|
65
|
+
trusting that it ran earlier.
|
|
66
|
+
|
|
67
|
+
### Noted
|
|
68
|
+
|
|
69
|
+
Running `sdlc tests audit` against this repository reported six weakenings that were not
|
|
70
|
+
weakenings: its own detection patterns, its own test fixtures, and the eval that quotes a
|
|
71
|
+
skipped test. A marker inside a string literal suppresses nothing and prose cannot disable a
|
|
72
|
+
linter, so neither is excluded at the cost of a bypass — but six false positives on the
|
|
73
|
+
tool's own diff is how a tool gets ignored, so both are now excluded, with regression tests
|
|
74
|
+
in each direction. Found by dogfooding, which is the point of dogfooding.
|
|
75
|
+
|
|
76
|
+
### Fixed
|
|
77
|
+
|
|
78
|
+
- **`quality.cmd` never ran.** It was in the schema, documented as the Level 2 configuration,
|
|
79
|
+
and reserved as a receipt kind — and no agent or command executed it. The only consumer was
|
|
80
|
+
the generated CI workflow. The readiness gate and the mechanical gate now run it, and an
|
|
81
|
+
unset budget is reported as `skipped` rather than passed. Found by auditing this plugin
|
|
82
|
+
against its own design brief.
|
|
83
|
+
- The OpenSpec commands in the agents and docs used `openspec change validate` and
|
|
84
|
+
`openspec change show`, which warn as deprecated on openspec 1.6. An agent reading our docs
|
|
85
|
+
would copy the deprecated form and paste the warning into its report as a finding. Found by
|
|
86
|
+
dogfooding: this repository now has the `openspec/` scaffolding its own config always said
|
|
87
|
+
it had.
|
|
88
|
+
|
|
89
|
+
### Documented
|
|
90
|
+
|
|
91
|
+
`docs/maturity.md` now says plainly what this still does not give you — detection precision
|
|
92
|
+
and recall, runtime evidence, token accounting, sandboxing — and, for precision and recall,
|
|
93
|
+
how to measure them yourself with a seeded-defect corpus. `docs/compliance.md` gains three
|
|
94
|
+
more honest limits rather than three more claims.
|
|
95
|
+
|
|
96
|
+
## [2.3.0] — 2026-10-25
|
|
97
|
+
|
|
98
|
+
Published through every package manager a developer is likely to already have.
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
|
|
102
|
+
- **More ways in.** `packaging/build-pypi.sh` builds a PyPI distribution
|
|
103
|
+
(`agentic-sdlc-cli` — the unscoped `agentic-sdlc` is taken on PyPI too), staging the agents,
|
|
104
|
+
commands, docs and profiles into the wheel so the plugin root resolves the same way it does
|
|
105
|
+
from a checkout. `packaging/homebrew/agentic-sdlc.rb` is a tap-ready formula with the real
|
|
106
|
+
release checksum. `.codex-plugin/plugin.json` and `.agents/plugins/marketplace.json` make the
|
|
107
|
+
repository installable as a **Codex plugin**, and `gemini-extension.json` as a **Gemini
|
|
108
|
+
extension** — both straight from the git URL, no registry involved.
|
|
109
|
+
- **`docs/install.md`** — all eight routes in one table, what each needs, and how to uninstall.
|
|
110
|
+
|
|
111
|
+
### Verified
|
|
112
|
+
|
|
113
|
+
The Codex plugin route was tested both ways, and the result is worth knowing: a plugin's hook
|
|
114
|
+
is **not run until Codex has been asked to trust it**. Untrusted, only `Stop` fired and
|
|
115
|
+
`git stash` went through; trusted, the same command was refused. `sdlc install codex` avoids
|
|
116
|
+
the prompt because a hook in your own `~/.codex/hooks.json` is already your configuration —
|
|
117
|
+
that path is verified working, receipt-dependent push gate included.
|
|
118
|
+
|
|
119
|
+
The PyPI wheel was installed into a clean virtualenv and run. The Homebrew formula carries the
|
|
120
|
+
real `v2.2.0` tarball checksum and is syntax-checked.
|
|
121
|
+
|
|
122
|
+
### Fixed
|
|
123
|
+
|
|
124
|
+
- The detected `secretScan` default used `gitleaks git … -n 50`, and gitleaks 8.x has no `-n`
|
|
125
|
+
shorthand on that subcommand — the gate's secret stage failed to run at all. It is now
|
|
126
|
+
`--log-opts="-n 50"`, with a regression test. Found by running this repository's own gate
|
|
127
|
+
against itself.
|
|
128
|
+
|
|
129
|
+
## [2.2.0] — 2026-10-25
|
|
130
|
+
|
|
131
|
+
A front door for everyone who is not using Claude Code. Until now the only one-command install
|
|
132
|
+
was `/plugin install`; everybody else had to clone a repository and run a Python script. That,
|
|
133
|
+
rather than any missing adapter, was what would have stopped other developers adopting this.
|
|
134
|
+
|
|
135
|
+
### Added
|
|
136
|
+
|
|
137
|
+
- **`install.sh`** — `curl -fsSL .../install.sh | sh`. Downloads a release into
|
|
138
|
+
`~/.agentic-sdlc`, links `sdlc` into a bin directory already on your PATH, and touches
|
|
139
|
+
nothing in your repository. No account, no sudo, no Python dependencies. It refuses to
|
|
140
|
+
proceed on Python older than 3.8 rather than failing later with something cryptic.
|
|
141
|
+
- **npm package `@mdferdousalam/agentic-sdlc`** — `npx @mdferdousalam/agentic-sdlc install`.
|
|
142
|
+
Scoped because the unscoped name belongs to an unrelated project. The `bin` is a small Node
|
|
143
|
+
launcher rather than the Python file directly, so Windows gets a real shim instead of
|
|
144
|
+
depending on a shebang npm cannot honour there; it tries `python`, `py`, `python3` on Windows
|
|
145
|
+
and `python3`, `python` elsewhere, and says exactly what is missing if none works.
|
|
146
|
+
|
|
147
|
+
### Verified
|
|
148
|
+
|
|
149
|
+
Installing the packed npm
|
|
150
|
+
tarball into a clean project and pushing: the generated `pre-push` hook
|
|
151
|
+
refused an ungated push to `main`, and allowed it once a gate receipt existed. CI now checks
|
|
152
|
+
the installer with `shellcheck`, that `package.json` and `plugin.json` agree on the version,
|
|
153
|
+
and that the packed tarball's CLI actually runs.
|
|
154
|
+
|
|
155
|
+
## [2.1.0] — 2026-10-25
|
|
156
|
+
|
|
157
|
+
The pipeline stops being a Claude Code feature.
|
|
158
|
+
|
|
159
|
+
### Added
|
|
160
|
+
|
|
161
|
+
- **`sdlc install [targets…]`** — one generator, fifteen targets, from the same canonical
|
|
162
|
+
`agents/`, `commands/` and `docs/rules.md`. With no arguments it detects the agents on the
|
|
163
|
+
machine and installs for all of them. `--list` shows what is supported and what each host can
|
|
164
|
+
actually enforce; `--dry-run` writes nothing; `sdlc uninstall` removes only our blocks and the
|
|
165
|
+
files we own.
|
|
166
|
+
- **Three more hosts that genuinely refuse a skipped stage**, not just instruct:
|
|
167
|
+
- **Codex CLI** — a `PreToolUse` entry merged into `~/.codex/hooks.json`, preserving every
|
|
168
|
+
other event already configured there. Codex uses the same hook wire contract as Claude Code.
|
|
169
|
+
- **Cline** — an executable `.clinerules/hooks/PreToolUse`, exit 2 blocks.
|
|
170
|
+
- **Gemini CLI** — no pre-tool hook exists, so the static refusals become
|
|
171
|
+
`.gemini/policies/agentic-sdlc.toml` rules (`decision = "deny"`), with the
|
|
172
|
+
receipt-dependent gates left to the git hooks. Commands ship as `.gemini/commands/sdlc/*.toml`.
|
|
173
|
+
- **Instruction and command adapters** for Cursor (`.cursor/rules/*.mdc` with `alwaysApply`,
|
|
174
|
+
`.cursor/commands/`), GitHub Copilot (`copilot-instructions.md`, `.github/prompts/*.prompt.md`),
|
|
175
|
+
Windsurf, Roo, Kilo, Continue and Aider — plus `AGENTS.md` everywhere, which the agents.md
|
|
176
|
+
adopter list says is read by 20+ tools.
|
|
177
|
+
- **Git hooks, installed by default** (`--no-git-hooks` to opt out). Every agent shells out to
|
|
178
|
+
git, so this is the only local enforcement that reaches Cursor, Copilot and a bare terminal
|
|
179
|
+
alike. An existing hook is appended to inside a marked block, never replaced.
|
|
180
|
+
- **`sdlc install ci`** — a GitHub Actions gate that re-runs the verify command, secret scan and
|
|
181
|
+
quality budget where no agent can reach them. It does not read receipts; it re-does the work.
|
|
182
|
+
- **`sdlc guard --command "<cmd>"`** — the same rules without a hook payload, which is how the
|
|
183
|
+
git hooks call it. Tested to agree with the stdin path rule for rule.
|
|
184
|
+
- **`docs/platforms.md`** — the capability matrix, saying for each host whether it can refuse a
|
|
185
|
+
tool call, how the format was verified, and which three are only conventional and unverified.
|
|
186
|
+
- **`sdlc doctor` is platform-aware** — which hosts are present, which are installed here, and
|
|
187
|
+
the exact command for each gap.
|
|
188
|
+
|
|
189
|
+
### Changed
|
|
190
|
+
|
|
191
|
+
- Everything written into a file we share with you is a marked block, so re-running updates only
|
|
192
|
+
our section and `uninstall` leaves your content. This applies to `AGENTS.md`, `GEMINI.md`,
|
|
193
|
+
`CONVENTIONS.md`, Copilot instructions, every rules file and both git hooks.
|
|
194
|
+
- The hook command resolves `python3` or `python` at install time rather than assuming a
|
|
195
|
+
shebang works, which is a prerequisite for Windows.
|
|
196
|
+
- `bin/sdlc-install-opencode` is **deprecated** — it now calls `sdlc install opencode`. Removal
|
|
197
|
+
in 3.0.0.
|
|
198
|
+
|
|
199
|
+
### Verified
|
|
200
|
+
|
|
201
|
+
Live, in real sessions:
|
|
202
|
+
|
|
203
|
+
- **Codex CLI** — `git stash` refused, and `git push origin main` refused for want of a gate
|
|
204
|
+
receipt. The second one matters: it proves the *receipt-dependent* gates work on Codex, not
|
|
205
|
+
only the static pattern rules. The user's pre-existing `Stop` hook fired in the same session,
|
|
206
|
+
so the `hooks.json` merge is safe in practice and not just in the unit test.
|
|
207
|
+
- **git hooks** — an ungated push to `main` refused from a plain terminal with no agent
|
|
208
|
+
involved; a feature branch allowed; `--no-verify` bypasses it exactly as documented.
|
|
209
|
+
|
|
210
|
+
**Not verified:** the live refusal inside a Cline session, and the Cursor, Copilot and Roo
|
|
211
|
+
pickup, which need interactive IDE sessions. Gemini could not be tested at all — Google now
|
|
212
|
+
returns `UNSUPPORTED_CLIENT` for this client's free tier. Kilo, Windsurf and Continue use
|
|
213
|
+
conventional paths that are not confirmed against a real tool; those adapters also write
|
|
214
|
+
`AGENTS.md`, so the rules land either way. Windows remains untested.
|
|
215
|
+
|
|
216
|
+
## [2.0.0] — 2026-10-25
|
|
217
|
+
|
|
218
|
+
A rewrite. v0.1.0 was a document pipeline that asked a model to be careful; this is a pipeline
|
|
219
|
+
whose stages cannot be skipped.
|
|
220
|
+
|
|
221
|
+
### Added — lifecycle, governance and adoption
|
|
222
|
+
|
|
223
|
+
Informed by a review of published agentic-SDLC material (Sonar's AC/DC framework, CodeRabbit's
|
|
224
|
+
guide, Weave Intelligence's ASDLC, Optiver's engineering account, NHI Management Group's
|
|
225
|
+
governance glossary, and the agentic-ai-sdlc/Framework repository). Two further sources the
|
|
226
|
+
maintainer supplied — a Medium article and an Infosys page — returned HTTP 403 and were not
|
|
227
|
+
read; nothing here is attributed to them.
|
|
228
|
+
|
|
229
|
+
- **The lifecycle no longer stops at the merge.** `sdlc-release-manager` and
|
|
230
|
+
`/agentic-sdlc:release` own deployment, post-deploy verification against the environment
|
|
231
|
+
itself, and the rollback decision. A written rollback plan and named irreversible steps are
|
|
232
|
+
required *before* deploying, and `release.*` in the config carries the commands.
|
|
233
|
+
- **Human approval gates.** `approvals.merge` and `approvals.release` (release defaults to
|
|
234
|
+
`human`). `sdlc approve <what> --as '<name>'` is a person's command; an agent that runs it
|
|
235
|
+
records nothing. Approvals are scoped — a release approval does not authorise a merge — and
|
|
236
|
+
are voided by the next commit. Deployment commands (kubectl, helm, terraform, serverless,
|
|
237
|
+
fly, ansible, cloud CLIs) are refused without both an approval and a READY receipt.
|
|
238
|
+
- **The hybrid retry loop.** `sdlc feedback write|read|clear` carries a gate's failure back to
|
|
239
|
+
the next attempt as enriched context rather than dropping it, and says to stop after three
|
|
240
|
+
attempts at the same stage.
|
|
241
|
+
- **`sdlc-remediator` and `/agentic-sdlc:remediate`** — work through findings one commit at a
|
|
242
|
+
time, each re-verified, each closed as fixed / refused / deferred / unexecuted. Suppressing a
|
|
243
|
+
warning to close a finding is called out as the failure the pipeline exists to prevent.
|
|
244
|
+
- **`sdlc-triager` and `/agentic-sdlc:triage`** — turn an alert, advisory, bug report or flaky
|
|
245
|
+
test into a scoped unit of work or a reasoned dismissal, treating the signal's text as data
|
|
246
|
+
and never as instruction.
|
|
247
|
+
- **Governance you can show someone**: `sdlc metrics` (stage outcomes, first-pass rates,
|
|
248
|
+
refusals, actors), `sdlc trace` (requirement → commit → test → receipts, markdown or JSON),
|
|
249
|
+
and an append-only `.sdlc/audit.log`. A 100% first-pass rate is reported as a finding.
|
|
250
|
+
- **`docs/maturity.md`** — four adoption levels, each expressed as a configuration rather than
|
|
251
|
+
an aspiration, with the metric that says you are ready to move up.
|
|
252
|
+
- **`docs/compliance.md`** — mapping to NIST AI RMF, OWASP Agentic AI, OWASP Non-Human
|
|
253
|
+
Identity and ISO 42001/SOC 2 evidence, with five stated limits including no cryptographic
|
|
254
|
+
identity and no shipped analyser.
|
|
255
|
+
- **`GETTING-STARTED.md`** — a guided first hour for someone who has never used this.
|
|
256
|
+
- **`quality` config** — a deterministic-analysis budget on *new* code, because the research on
|
|
257
|
+
agent-written code reports rising warnings and complexity rather than falling ones.
|
|
258
|
+
- **An eval suite** (`evals/`, four cases) for `claude plugin eval`: does the spec reviewer
|
|
259
|
+
catch unfalsifiable requirements, does the gate refuse an `unexecuted` criterion behind a
|
|
260
|
+
green suite, is a refusal negotiable under social pressure, does the release manager insist
|
|
261
|
+
on a rollback plan and a human approval.
|
|
262
|
+
|
|
263
|
+
### Added — the enforced pipeline
|
|
264
|
+
|
|
265
|
+
- **Enforcement.** `hooks/hooks.json` registers a `PreToolUse` hook calling `bin/sdlc guard`,
|
|
266
|
+
which exits 2 to refuse a tool call. A branch needs an approved spec; a push to a protected
|
|
267
|
+
branch needs a passed gate; a merge needs a READY verdict for that exact commit. Destructive
|
|
268
|
+
git, publishing and credential reads are refused outright.
|
|
269
|
+
- **Receipts.** `sdlc receipt write|check|show` records each stage's verdict bound to a commit,
|
|
270
|
+
a clock and — for a specification — a digest of the content approved. A new commit voids a
|
|
271
|
+
receipt; editing an approved spec voids its approval.
|
|
272
|
+
- **`bin/sdlc`** — stack detection, config, receipts, the guard, `status` and `doctor`. Python
|
|
273
|
+
3.8+, standard library only, no network.
|
|
274
|
+
- **Seven new agents**: `sdlc-implementer` (v0.1.0 had no agent that wrote code),
|
|
275
|
+
`sdlc-test-author`, `sdlc-code-reviewer`, `sdlc-security-reviewer`, `sdlc-verifier`,
|
|
276
|
+
`sdlc-lander`, `sdlc-reporter`.
|
|
277
|
+
- **Eleven slash commands** — `:init`, `:feature`, `:implement`, `:verify`, `:review`,
|
|
278
|
+
`:gate`, `:readiness`, `:land`, `:report`, `:status`, `:doctor`.
|
|
279
|
+
- **OpenSpec as a first-class engine.** `spec.engine` is detected; the spec reviewer runs
|
|
280
|
+
`openspec change validate --strict`, `tasks.md` becomes the acceptance criteria the verifier
|
|
281
|
+
and the gate check against, and the reporter archives the change after landing.
|
|
282
|
+
- **Profiles** — `webapp`, `library`, `service`, `compiler`: opt-in standards a reviewer can
|
|
283
|
+
check, selected by `"profile"`.
|
|
284
|
+
- **A JSON Schema** for the adapter, and a config that is re-detected without overwriting
|
|
285
|
+
anything set by hand.
|
|
286
|
+
- **opencode support** — `bin/sdlc-install-opencode` installs the same agents, commands and
|
|
287
|
+
enforcement, calling the same guard.
|
|
288
|
+
- **Tests** — 46 cases over detection, the guard, receipt binding and config overrides, run in
|
|
289
|
+
CI. The validator now checks agent/filename agreement, command→agent references, hook wiring
|
|
290
|
+
and that the CLI is executable.
|
|
291
|
+
|
|
292
|
+
### Changed
|
|
293
|
+
|
|
294
|
+
- **The evidence vocabulary is five words** — passed, failed, skipped, refused, unexecuted —
|
|
295
|
+
replacing `met/partial/missing` and `pass/fail`. A test that did not run is `unexecuted`, and
|
|
296
|
+
the gate treats it as such.
|
|
297
|
+
- **Specifications are no longer hand-versioned.** `PRD_v1.0.md` and `CVR_of-DI-v1.0_r1.md`
|
|
298
|
+
become `PRD.md` and `verification.md`; git keeps the history.
|
|
299
|
+
- `sdlc.config.json` gains `spec`, `secretScan`, `profile`, `receipts`, `enforce`, `heavy`, and
|
|
300
|
+
a `version` field.
|
|
301
|
+
- Every agent now reads `docs/rules.md` rather than restating the rules, so they cannot drift
|
|
302
|
+
apart.
|
|
303
|
+
|
|
304
|
+
### Removed
|
|
305
|
+
|
|
306
|
+
- **The configurability audit from the core.** "No hardcoded value the spec marked
|
|
307
|
+
configurable", reference tables, admin CRUD surfaces and 3NF were rules from the application
|
|
308
|
+
the kit was extracted from, and they produced noise on every other kind of project. They now
|
|
309
|
+
live in `profiles/webapp.md` and apply when you ask for them.
|
|
310
|
+
- **The DI stage.** A third document between the FRD and the code mostly restated the FRD; the
|
|
311
|
+
implementer reads the specification directly. What the DI uniquely carried — the decisions
|
|
312
|
+
taken while building — is now in the implementation report, where it is written after the
|
|
313
|
+
fact and is therefore true.
|
|
314
|
+
- The `sdlc-init`, `start-feature`, `dev-instructions`, `verification-report` and
|
|
315
|
+
`implementation-report` skills, replaced by commands and agents. Three reference skills
|
|
316
|
+
remain: `agentic-sdlc-pipeline`, `openspec-with-sdlc`, `writing-specifications`.
|
|
317
|
+
|
|
318
|
+
### Migration from 0.1.x
|
|
319
|
+
|
|
320
|
+
1. `/agentic-sdlc:init --write` — rewrites `sdlc.config.json` in the v2 shape, keeping your
|
|
321
|
+
`trunk`, `verifyCmd` and anything else you had set.
|
|
322
|
+
2. Add `.sdlc/` to `.gitignore`.
|
|
323
|
+
3. Set `"profile": "webapp"` if you relied on the configurability and data-model rules.
|
|
324
|
+
4. Existing `PRD_v1.0.md` / `FRD_v1.0.md` still read fine; new specs drop the version suffix.
|
|
325
|
+
5. `/agentic-sdlc:doctor`.
|
|
326
|
+
|
|
327
|
+
## [0.1.0] — 2026-10
|
|
328
|
+
|
|
329
|
+
First release: PRD → FRD → branch → DI → code → CVR → readiness gate → IR, four agents, five
|
|
330
|
+
skills, and a detected `sdlc.config.json`.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
A guided first hour. No prior knowledge of the pipeline assumed. If you have ten minutes, do
|
|
4
|
+
Part 1 and stop — it is useful on its own.
|
|
5
|
+
|
|
6
|
+
## What this actually is, in one paragraph
|
|
7
|
+
|
|
8
|
+
You ask an AI agent to build something. It writes code fast, and the hard part becomes knowing
|
|
9
|
+
whether the result is any good. This plugin puts stages between "asked" and "merged" — write
|
|
10
|
+
the spec, review the spec, branch, build, verify, review, gate, land — and then makes those
|
|
11
|
+
stages impossible to skip, by refusing the tool call. You still decide everything that matters.
|
|
12
|
+
The pipeline stops a confident agent from quietly skipping the step that would have caught it.
|
|
13
|
+
|
|
14
|
+
## Part 1 — install and look around (10 minutes)
|
|
15
|
+
|
|
16
|
+
**Using Claude Code?**
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
/plugin marketplace add mdferdousalam/agentic-sdlc
|
|
20
|
+
/plugin install agentic-sdlc
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Using anything else** — Cursor, Codex, Copilot, Gemini, Cline, Windsurf, Zed, Aider:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
curl -fsSL https://raw.githubusercontent.com/mdferdousalam/agentic-sdlc/main/install.sh | sh
|
|
27
|
+
sdlc install # detects your agents and sets each one up
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Or with npm, if that is more your habit: `npx @mdferdousalam/agentic-sdlc install`.
|
|
31
|
+
Either way you need `git` and Python 3.8 or newer — nothing else.
|
|
32
|
+
|
|
33
|
+
It installs git hooks too, because on most hosts that is the only thing that can actually stop
|
|
34
|
+
a mistake. [What each host can and cannot enforce](docs/platforms.md) — worth two minutes
|
|
35
|
+
before you trust it.
|
|
36
|
+
|
|
37
|
+
Then, inside a project you work on:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
/agentic-sdlc:init --write
|
|
41
|
+
/agentic-sdlc:doctor
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`init` looks at your repository and writes `sdlc.config.json` — your package manager, your
|
|
45
|
+
trunk branch, your test runner, your verify command. **Open that file and read it.** It is the
|
|
46
|
+
only place the pipeline learns about your project, and detection guesses. The field that
|
|
47
|
+
matters most is `verifyCmd`: the command that tells you the code is sound. If it is wrong or
|
|
48
|
+
empty, fix it now; nothing downstream works without it.
|
|
49
|
+
|
|
50
|
+
`doctor` tells you what is missing. `gitleaks not found` is worth fixing (`brew install
|
|
51
|
+
gitleaks`); the rest you can leave.
|
|
52
|
+
|
|
53
|
+
### See the enforcement for yourself
|
|
54
|
+
|
|
55
|
+
Ask your agent to run `git stash`. It will come back refused. That is the point: the rules are
|
|
56
|
+
not advice to a model that may or may not follow them.
|
|
57
|
+
|
|
58
|
+
## Part 2 — one real feature (30–45 minutes)
|
|
59
|
+
|
|
60
|
+
Pick something small and genuinely useful. Not a toy, not a rewrite.
|
|
61
|
+
|
|
62
|
+
### 1. Say what you want
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
/agentic-sdlc:feature "add a --format=json flag to the export command"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Three things happen. A spec gets written. A second agent reviews it and usually asks for
|
|
69
|
+
changes — **this is the pipeline working, not failing**. Then, only once the spec is approved,
|
|
70
|
+
a branch is created.
|
|
71
|
+
|
|
72
|
+
> **Read the spec before it is approved.** Five minutes here saves an hour later. You are
|
|
73
|
+
> looking for: would someone who knows nothing else build the right thing from this? Is every
|
|
74
|
+
> requirement something you could check? Is anything missing that you were assuming?
|
|
75
|
+
|
|
76
|
+
### 2. Let it build
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
/agentic-sdlc:implement
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
It works the checklist in order, writes tests, commits each item. If the spec turns out to be
|
|
83
|
+
ambiguous, it stops and asks rather than guessing. When that happens, answer the question and
|
|
84
|
+
let it carry on — that stop just prevented a silent wrong decision.
|
|
85
|
+
|
|
86
|
+
### 3. Check what was built against what you asked for
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
/agentic-sdlc:verify
|
|
90
|
+
/agentic-sdlc:review
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`verify` goes requirement by requirement and finds the code and the test for each. `review`
|
|
94
|
+
reads the diff for defects and, where it matters, security.
|
|
95
|
+
|
|
96
|
+
You will probably see `unexecuted` next to a requirement. It means nobody ran a test for it.
|
|
97
|
+
It is not a failure and it is not a pass, and the gate will treat it as blocking. That one word
|
|
98
|
+
is most of the value here.
|
|
99
|
+
|
|
100
|
+
### 4. The gate
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
/agentic-sdlc:readiness
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Clean tree, your verify command, a secret scan, the reviewers, every criterion checked against
|
|
107
|
+
real evidence. It answers READY or NOT-READY.
|
|
108
|
+
|
|
109
|
+
**NOT-READY on your first run is normal.** Fix what it found — `/agentic-sdlc:remediate` works
|
|
110
|
+
through findings one at a time — and run it again.
|
|
111
|
+
|
|
112
|
+
### 5. Land it
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
/agentic-sdlc:land
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Branch pushed, pull request opened, with the criteria and their evidence in the body. Review
|
|
119
|
+
the PR yourself and merge it the way you always do.
|
|
120
|
+
|
|
121
|
+
## When something is blocked
|
|
122
|
+
|
|
123
|
+
You will see a message like:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
BLOCKED by agentic-sdlc: merging needs a READY readiness receipt, and there is no readiness
|
|
127
|
+
receipt. Run `/agentic-sdlc:readiness`.
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Every refusal names what is missing and what to do. Three rules:
|
|
131
|
+
|
|
132
|
+
1. **Do the thing it asks for.** It is almost always two minutes of work.
|
|
133
|
+
2. **Do not argue with the agent about it.** The refusal is a hook, not an opinion; the model
|
|
134
|
+
cannot grant an exception and will waste your tokens trying.
|
|
135
|
+
3. **If a rule is genuinely wrong for your project, turn it off in the config** — `enforce` in
|
|
136
|
+
`sdlc.config.json`. That is a visible, reviewable decision. Working around it is not.
|
|
137
|
+
|
|
138
|
+
`/agentic-sdlc:status` shows which stages have left evidence and which have not.
|
|
139
|
+
|
|
140
|
+
## The vocabulary, because it is used precisely
|
|
141
|
+
|
|
142
|
+
**passed** — it ran and succeeded. **failed** — it ran and did not.
|
|
143
|
+
**skipped** — the runner skipped it. **refused** — the system correctly declined.
|
|
144
|
+
**unexecuted** — nobody ran it.
|
|
145
|
+
|
|
146
|
+
The last three are not "passed". Most bad agentic reporting comes from collapsing them.
|
|
147
|
+
|
|
148
|
+
## Three things worth doing in week one
|
|
149
|
+
|
|
150
|
+
1. **Set a profile.** `"profile": "webapp"`, `library`, `service` or `compiler` in the config.
|
|
151
|
+
The reviewers then hold you to the standards that match what you are building, instead of
|
|
152
|
+
generic advice. See [profiles](profiles/README.md).
|
|
153
|
+
2. **Make `verifyCmd` strict.** It is the floor of every gate. If it does not catch a broken
|
|
154
|
+
build today, it will not catch one next month either.
|
|
155
|
+
3. **Read one spec properly before approving it.** The single highest-leverage habit here. An
|
|
156
|
+
agent will build the wrong thing beautifully if you let it.
|
|
157
|
+
|
|
158
|
+
## Common questions
|
|
159
|
+
|
|
160
|
+
**Do I have to use every stage?** No. The three enforced ones are branch-needs-approved-spec,
|
|
161
|
+
push-to-trunk-needs-gate, and merge-needs-readiness, and each can be turned off in `enforce`.
|
|
162
|
+
Start with whichever subset you will actually use.
|
|
163
|
+
|
|
164
|
+
**Does this work without OpenSpec?** Yes — the spec becomes a PRD and an FRD, and everything
|
|
165
|
+
downstream is identical. OpenSpec adds a validator and an archive if you want them.
|
|
166
|
+
|
|
167
|
+
**Does it work outside Claude Code?** Yes — `sdlc install` covers Codex, Cline, Cursor, Copilot, Gemini, Windsurf, Roo, Kilo, Continue, Aider and every AGENTS.md host. Four of them can refuse a tool call outright; the rest rely on the git hooks and CI. The [matrix](docs/platforms.md) is explicit about which is which.
|
|
168
|
+
|
|
169
|
+
**What if my team does not use agents yet?** The gates work on human changes too, and most
|
|
170
|
+
teams find the specification review is where the value shows up first.
|
|
171
|
+
|
|
172
|
+
**Where do I go next?** [The pipeline in detail](docs/pipeline.md) ·
|
|
173
|
+
[Configuration](docs/configuration.md) · [Maturity levels](docs/maturity.md) ·
|
|
174
|
+
[A worked example](examples/worked-example.md)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Engr Md Ferdous Alam
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|