@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.
Files changed (90) hide show
  1. package/.claude-plugin/marketplace.json +11 -0
  2. package/.claude-plugin/plugin.json +31 -0
  3. package/CHANGELOG.md +330 -0
  4. package/GETTING-STARTED.md +174 -0
  5. package/LICENSE +21 -0
  6. package/README.md +268 -2
  7. package/SECURITY.md +25 -0
  8. package/agents/sdlc-architecture-reviewer.md +71 -0
  9. package/agents/sdlc-branch-opener.md +83 -0
  10. package/agents/sdlc-code-reviewer.md +62 -0
  11. package/agents/sdlc-impact-analyst.md +70 -0
  12. package/agents/sdlc-implementer.md +60 -0
  13. package/agents/sdlc-lander.md +40 -0
  14. package/agents/sdlc-readiness-gate.md +128 -0
  15. package/agents/sdlc-release-manager.md +76 -0
  16. package/agents/sdlc-remediator.md +89 -0
  17. package/agents/sdlc-reporter.md +42 -0
  18. package/agents/sdlc-security-reviewer.md +62 -0
  19. package/agents/sdlc-spec-reviewer.md +56 -0
  20. package/agents/sdlc-spec-writer.md +62 -0
  21. package/agents/sdlc-test-author.md +32 -0
  22. package/agents/sdlc-triager.md +48 -0
  23. package/agents/sdlc-verifier.md +69 -0
  24. package/bin/__pycache__/sdlccpython-315.pyc +0 -0
  25. package/bin/sdlc +2747 -0
  26. package/bin/sdlc-install-opencode +10 -0
  27. package/commands/doctor.md +9 -0
  28. package/commands/feature.md +17 -0
  29. package/commands/gate.md +33 -0
  30. package/commands/impact.md +13 -0
  31. package/commands/implement.md +11 -0
  32. package/commands/init.md +15 -0
  33. package/commands/land.md +10 -0
  34. package/commands/metrics.md +12 -0
  35. package/commands/readiness.md +8 -0
  36. package/commands/release.md +16 -0
  37. package/commands/remediate.md +13 -0
  38. package/commands/report.md +11 -0
  39. package/commands/review.md +12 -0
  40. package/commands/status.md +9 -0
  41. package/commands/trace.md +9 -0
  42. package/commands/triage.md +14 -0
  43. package/commands/verify.md +10 -0
  44. package/docs/compliance.md +70 -0
  45. package/docs/configuration.md +106 -0
  46. package/docs/control-spec.md +269 -0
  47. package/docs/install.md +75 -0
  48. package/docs/maturity.md +129 -0
  49. package/docs/opencode.md +45 -0
  50. package/docs/openspec.md +58 -0
  51. package/docs/pipeline.md +160 -0
  52. package/docs/platforms.md +99 -0
  53. package/docs/rules.md +122 -0
  54. package/evals/baseline-attributes-failure/graders/criteria.md +18 -0
  55. package/evals/baseline-attributes-failure/prompt.md +23 -0
  56. package/evals/budget-stops-rather-than-asks/graders/criteria.md +19 -0
  57. package/evals/budget-stops-rather-than-asks/prompt.md +14 -0
  58. package/evals/critical-low-confidence-escalates/graders/criteria.md +22 -0
  59. package/evals/critical-low-confidence-escalates/prompt.md +17 -0
  60. package/evals/gate-refuses-unexecuted/graders/criteria.md +16 -0
  61. package/evals/gate-refuses-unexecuted/prompt.md +15 -0
  62. package/evals/refusal-is-not-negotiated/graders/criteria.md +17 -0
  63. package/evals/refusal-is-not-negotiated/prompt.md +7 -0
  64. package/evals/release-needs-rollback-and-approval/graders/criteria.md +15 -0
  65. package/evals/release-needs-rollback-and-approval/prompt.md +6 -0
  66. package/evals/remediator-refuses-weakened-test/graders/criteria.md +20 -0
  67. package/evals/remediator-refuses-weakened-test/prompt.md +33 -0
  68. package/evals/spec-review-catches-unfalsifiable/graders/criteria.md +17 -0
  69. package/evals/spec-review-catches-unfalsifiable/prompt.md +17 -0
  70. package/examples/worked-example.md +131 -0
  71. package/hooks/hooks.json +16 -0
  72. package/npm/cli.js +35 -0
  73. package/opencode/plugin/agentic-sdlc.ts +52 -0
  74. package/package.json +59 -4
  75. package/profiles/README.md +52 -0
  76. package/profiles/compiler.md +33 -0
  77. package/profiles/concerns/architecture.md +50 -0
  78. package/profiles/concerns/concurrency.md +59 -0
  79. package/profiles/concerns/data.md +62 -0
  80. package/profiles/concerns/memory.md +52 -0
  81. package/profiles/concerns/performance.md +54 -0
  82. package/profiles/concerns/platform.md +62 -0
  83. package/profiles/library.md +31 -0
  84. package/profiles/service.md +32 -0
  85. package/profiles/webapp.md +40 -0
  86. package/schema/finding.schema.json +267 -0
  87. package/schema/sdlc.config.schema.json +324 -0
  88. package/skills/agentic-sdlc-pipeline/SKILL.md +66 -0
  89. package/skills/openspec-with-sdlc/SKILL.md +56 -0
  90. 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.