@antoneeo/agentic-sdlc-skill 1.25.0 → 1.26.1

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/CHANGELOG.md CHANGED
@@ -2,6 +2,82 @@
2
2
 
3
3
  Tutte le modifiche significative a questa skill saranno documentate in questo file.
4
4
 
5
+ ## [1.26.1 / kb 1.4.7 / mkt 0.4.7] - 2026-08-06
6
+
7
+ The late design review of F-034 (`review.md` row 1b, run after 1.26.0 had shipped because the
8
+ gate had been skipped) returned FAIL with four blockers. Three were defects in the shipped
9
+ doctrine and are fixed here; the fourth was a governance-record gap, fixed in `ai_docs/`.
10
+
11
+ ### Fixed
12
+ - **`dispatch.md` contradicted the scoped re-review it delegates to `review.md` to define.**
13
+ It said "exactly three review touches per task, never a loop" and "not an extra review slot",
14
+ while `review.md` requires every review-driven correction to be re-reviewed — so an agent
15
+ executing a dispatched plan received two irreconcilable instructions. Reconciled: the scoped
16
+ re-review is a round **inside** slot 2 or 3, never a fourth slot; "never a loop" bounds the
17
+ slots, not the rounds within one. (Shared spine — the contradiction had shipped in all three
18
+ distributions; `dispatch.md` was missing from 1.26.0's impact map.)
19
+ - **The claim-to-evidence rule had no enforcement point.** Its acceptance criterion promised a
20
+ completion claim without fresh proof would be "nameable by the closure review", but
21
+ `review.md` §Reviewing had no such finding class and the reviewer is never handed `SKILL.md`.
22
+ Added: an unproven or stale completion claim — including one resting on a narrower check than
23
+ the claim needs, or on a delegated agent's report rather than the diff — is now a finding.
24
+ - **`SKILL.md`'s branch hygiene contradicted its own destructive guard.** One bullet ordered the
25
+ agent to "clean up the branch/worktree; never leave orphan branches"; the next reserved
26
+ destruction for the user's explicit request. The cleanup is now PROPOSED once the user has
27
+ chosen, with the anti-orphan duty kept as something to raise rather than to perform.
28
+ - **Two gaps in the scoped re-review's own wording:** a PASS that carried findings is now
29
+ explicitly provisional until its corrections pass a round (the commonest real case, previously
30
+ unruled — the rule's trigger fired but its gate was already behind the fixes); and the single
31
+ REVIEW_LOG row now carries the round-1 verdict alongside the final one (`FAIL → PASS`) instead
32
+ of collapsing a first-round FAIL into a bare PASS, which erased the evidence the same file
33
+ says logging exists to preserve.
34
+
35
+ - **`revise_rounds` had no defined meaning**, in the very document `SKILL.md` names as the owner
36
+ of the review log's schema and column meanings — and the historical rows already used it both
37
+ ways. Defined: it counts **review rounds**, not fix cycles (the first review is round 1, each
38
+ scoped re-review adds one), so a review whose findings were corrected always reads ≥ 2 and 3 is
39
+ the ceiling. The `verdict` column's format is defined alongside it (`FAIL → PASS` when the
40
+ round-1 and final verdicts differ), and the second example row — which taught a bare `PASS`
41
+ after two real findings closed in one round — now teaches both rules instead of contradicting
42
+ one. Raised at the review's round-3 cap and fixed before release rather than deferred.
43
+
44
+ ### Changed
45
+ - `ai_docs/solutions/ANALYSIS_execution_integrity.md` gains what the design review found
46
+ missing: the **ceremony-cost disclosure** Non-Goal 3 requires (measured on the shipped diff)
47
+ with the owner's explicit acceptance recorded; the **rulings placement** run per mechanism
48
+ against the ledger's own criterion (the previous claim used a narrower "user-facing" test the
49
+ ledger does not define); the **lens-scoping decision** stated; and a named disposition for the
50
+ chronic `stale` debt. No shipped file changes from these.
51
+
52
+ ## [1.26.0 / kb 1.4.6 / mkt 0.4.6] - 2026-08-06
53
+
54
+ ### Added
55
+ - **Execution Integrity — Tranche A (F-034).** Three observed/irreversible gaps close as
56
+ wording in existing owners, from a firsthand comparative study of Superpowers 6.2.0 (MIT;
57
+ concepts reimplemented, no text copied, no dependency) gated by the standing weight
58
+ criterion: (1) **claim-to-evidence** — every completion claim binds to a proof run AFTER
59
+ the final relevant edit; a narrower check never supports a broader claim; delegated work is
60
+ verified on the diff, never on the subagent's report; unavailable proof is reported, never
61
+ claimed (observed failure: a closure artifact claimed "check clean" while the gate was NOT
62
+ CLEAN — REVIEW_LOG F-033). (2) **Scoped re-review of review-driven corrections**
63
+ (`review.md`, shared spine — ACTIVE in kb/mkt too): a fix is unreviewed work; per-finding
64
+ verdicts ADDRESSED/NOT ADDRESSED/CONTESTED, correction-only scope, new breakage in the fix
65
+ joins the findings, two rounds are the norm inside the existing cap of 3, one logical
66
+ review = one REVIEW_LOG row. (3) **Destructive guards** — integration is the user's choice;
67
+ discard only on explicit request naming branch/commits/worktree; no unauthorized
68
+ force-push; no foreign-worktree cleanup; project guides own the specific commands.
69
+ - **Enforcement-writing technique** on the touched rules: a triage rationalization table
70
+ (`Excuse | Reality`) in Rule Zero and red-flag stop-words in the verification rule — the
71
+ study's key finding was that Superpowers' asset is HOW it writes rules (pre-refuting the
72
+ escape thought), not any mechanism.
73
+ - **Reviewer output honesty:** `CANNOT VERIFY` is a first-class reviewer output (a claim not
74
+ checkable from the provided inputs is reported, not silently passed); pre-judging findings
75
+ in a review request ("don't flag X") is forbidden. Companion change in the devPNT reviewer
76
+ agents ships in that repo.
77
+ Tranche B (tdd/debugging) rides the next admitted touch of those overlays; Tranche C
78
+ (dispatch ledger machinery) stays frozen until an observed failure reopens it. Rationale:
79
+ `ai_docs/architecture/ADR_2026-08-06_execution_integrity_tranche_a.md`.
80
+
5
81
  ## [1.25.0 / kb 1.4.5 / mkt 0.4.5] - 2026-08-06
6
82
 
7
83
  ### Added
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-sdlc-skill",
3
- "version": "1.25.0",
3
+ "version": "1.26.1",
4
4
  "description": "Documentation-First SDLC protocol with triage, Vision governance and optional devPNT integration.",
5
5
  "author": "Antonio Pinto (https://github.com/Antoneeo)"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antoneeo/agentic-sdlc-skill",
3
- "version": "1.25.0",
3
+ "version": "1.26.1",
4
4
  "description": "Documentation-First SDLC protocol for Claude Code, Gemini CLI, Google Antigravity and Codex with risk triage, Vision governance, installed support files and optional devPNT integration.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: agentic-sdlc
3
- version: 1.25.0
3
+ version: 1.26.1
4
4
  description: Documentation-First SDLC protocol with risk-proportional triage, Vision as a guide, a complete Standalone mode and optional symbiosis with devPNT. Use for features, significant bugs, refactors, audits and documented maintenance.
5
5
  author: Antonio Pinto (https://github.com/Antoneeo)
6
6
  copyright: (c) 2026 Antonio Pinto
@@ -56,6 +56,16 @@ Cross-cutting rules:
56
56
  - **Before asking the user anything — any phase, any level — the question must pass the legality test: search first and name the search with its result; name the decision or fact blocked without the answer.** Blocking the work is the exception, not the default. `elicitation.md` §The question discipline owns the rule and is the only place it is stated — read it before you ask, and do not work from a summary of it.
57
57
  - The full audit does not start for L1/L2 unless explicitly requested.
58
58
 
59
+ Triage rationalizations — the thought on the left is the signal to STOP and re-triage:
60
+
61
+ | Excuse | Reality |
62
+ |---|---|
63
+ | "Too simple to need the process" | Simple is where unexamined assumptions bite; L1's process IS proportionally simple — use it, don't skip it |
64
+ | "It's just a fix" | A "fix" that delivers a new capability or client is a new feature wearing a fix label — the framing does not set the level, the criteria do |
65
+ | "It's small, so L2" | Size is one criterion of several: one touched contract, security surface or non-obvious design makes it L3 at any size |
66
+ | "I'll reclassify later if it grows" | Later is after the unscoped edits exist; reclassify the moment the bigger impact emerges, not at closure |
67
+ | "The doubt itself is small" | When in doubt, pick the higher level — that rule exists precisely for this thought |
68
+
59
69
  ## Write Triggers
60
70
 
61
71
  Triage decides IF documentation is due; this table decides WHICH document each event produces, and when. **One event, one destination:** when the trigger fires and the document does not exist, create it; when it exists, update it — never duplicate it. This table is the authoritative write index — the workflow phases carry the surrounding procedure and point here for the trigger.
@@ -262,6 +272,7 @@ Hybrid L3:
262
272
  ### 5. Closure
263
273
 
264
274
  - Run the relevant tests/lint/smoke checks.
275
+ - **Claim-to-evidence (fires at EVERY completion claim, any phase, any level).** Before stating or implying that anything passes, works, is fixed, is clean or is complete: name the claim, run the proof that establishes *that* claim **after the final relevant edit**, read the full result, and report the actual status with the evidence. Freshness: a check run before a later relevant change proves nothing about the current tree. Breadth: a narrower check never supports a broader claim — targeted tests ≠ full suite; lint ≠ build; "tests pass" ≠ "requirements complete" (that claim maps to the Functional Spec acceptance criteria where the artifact carries them; "gate clean" maps to a fresh gate run reporting clean). **Delegated work is verified on the diff/files, never on the agent's report** — "the subagent said success" is a claim, not evidence. If the environment cannot run the proof, say so and give the alternative evidence — never claim the unavailable result. Red flags that mean STOP and run the proof: "should", "probably", "seems to", "still passes", "just this once", any satisfaction expressed before verification.
265
276
  - For the review itself follow `review.md` (requesting and receiving findings) — the single definition, intended for reuse by the Hybrid review gates (devPNT-side wiring out of this unit's scope).
266
277
  - Verify alignment with the local Vision or the devPNT M-VISION.
267
278
  - If the work was governed by user-provided indications and is reusable, **PROPOSE distilling a guide** (proactive trigger, `guides.md` §1) — a proposal for the user, never a silent write, never from model knowledge.
@@ -278,7 +289,8 @@ Hybrid L3:
278
289
  - If an architectural decision was taken (new pattern, layer or contract change, structural dependency), record an ADR before DONE — Standalone in `architecture/`, Hybrid propose the ADR/KL update in the devPNT DB. No decision, no ADR (Write Triggers).
279
290
  - In Standalone, if the project adopts `sdlc_check.py`, run `python <skill_dir>/scripts/sdlc_check.py check --root <project_root>` or the equivalent local copy.
280
291
  - Updated documents must travel in the same commit/PR as the code they describe.
281
- - **Branch/worktree hygiene**: an L3 ran on its own branch (Phase 4) — close it with an explicit merge decision (merge, keep open, or discard) and clean up the branch/worktree; never leave orphan branches. In Hybrid, the running devPNT server locks `.devpnt/*.db`, so the merge is done from a separate git worktree or via a ref-only push, never an in-place branch switch in the primary worktree.
292
+ - **Branch/worktree hygiene**: an L3 ran on its own branch (Phase 4) — close it with an explicit merge decision (merge, keep open, or discard), and once the user has chosen, PROPOSE the branch/worktree cleanup their choice implies; an orphan branch left behind with nothing said is the failure this bullet prevents — the cleanup itself is theirs to authorize (next bullet). In Hybrid, the running devPNT server locks `.devpnt/*.db`, so the merge is done from a separate git worktree or via a ref-only push, never an in-place branch switch in the primary worktree.
293
+ - **Destructive guards (integration is the user's; destruction is explicit).** The integration choice — merge, push/PR, keep — belongs to the user. Discard happens ONLY on the user's explicit request, and the confirmation names exactly what dies: the branch, its commits, the worktree path. Never force-push without explicit authorization; a rejected push means the remote moved — investigate, don't force. Never clean up a worktree this workflow did not create — the host or another workflow owns it. Repository-specific release/finish commands are the project guide layer's (the router in `## Operative Guides`): the skill owns this discipline, the matched `GUIDE_*.md` owns the commands — cite it, never restate it.
282
294
 
283
295
  ## ai_docs documents: two indexes + lifecycle
284
296
 
@@ -65,6 +65,15 @@ Exactly three review touches per task, never a loop:
65
65
  If a review FAILs, fix and re-run `verify` — that is a normal loop iteration
66
66
  via the ledger's fail path, not an extra review slot.
67
67
 
68
+ **The scoped re-review is a round INSIDE slot 2 or 3, never a fourth slot.**
69
+ `review.md` §Receiving requires every review-driven correction to be
70
+ re-reviewed against the correction alone — that round belongs to the slot whose
71
+ findings caused it, and is bounded by the same cap of 3 rounds. "Never a loop"
72
+ bounds the SLOTS (no unbounded re-reviewing of a task), not the rounds inside
73
+ one slot: a fix nobody looked at is the defect the round exists to catch. Slot 1
74
+ is the implementer's own pass, not an independent review, so its fixes carry no
75
+ re-review round. The ledger records the round on the task's fail path as usual.
76
+
68
77
  ## Ledger protocol summary
69
78
 
70
79
  Read → skip-if-done → dispatch-if-pending → write. The ledger is the only
@@ -99,6 +99,12 @@ conversation instead of reviewing the change itself. Say which finding
99
99
  classes you want covered (correctness, security, conformance to the design,
100
100
  test coverage) if the default scope is not obvious.
101
101
 
102
+ Never pre-judge findings for the reviewer: do not instruct them to ignore or
103
+ not flag a specific issue ("don't treat X as a defect", "at most minor"). If
104
+ you believe a finding would be a false positive, let the reviewer raise it and
105
+ resolve it with evidence in §Receiving — pre-judging is usually the requester
106
+ sparing themselves a round.
107
+
102
108
  ## Receiving
103
109
 
104
110
  **MUST answer findings one by one — fix, or justify with evidence; why:
@@ -111,6 +117,28 @@ resolve a disagreement by rewording the finding until it goes away. When the
111
117
  project keeps a `REVIEW_LOG` (or equivalent), log the outcome of each
112
118
  finding there.
113
119
 
120
+ ### Review-driven corrections (scoped re-review)
121
+
122
+ A fix made in response to a finding is new, unreviewed work — stopping after
123
+ "I fixed it" ships the one version nobody reviewed. Every review-driven change
124
+ therefore gets a **scoped re-review** before the review can PASS: hand the
125
+ re-reviewer the original findings and ONLY the correction (the fix diff/range
126
+ for code, the amended sections for a document), and require a per-finding
127
+ verdict — `ADDRESSED`, `NOT ADDRESSED`, or `CONTESTED` with evidence. **A PASS
128
+ that carried findings is provisional until its corrections pass that round** —
129
+ the commonest real case is a PASS with non-blocking findings the author then
130
+ fixes, and stopping there ships precisely the unreviewed version this rule
131
+ exists to catch. The re-review also checks the correction itself for new
132
+ blocker-level breakage — and nothing else: out-of-scope observations become separately
133
+ recorded findings, never an extension of the loop. Expect two rounds as the
134
+ norm, not the exception — round 1 finds, round 2 verifies the fixes — inside
135
+ the same cap of 3 (§When a review is due). One logical review stays ONE
136
+ REVIEW_LOG row — a scoped re-review is a round, not a new review — with the
137
+ rounds narrated in the row's notes and **the verdict column carrying the
138
+ round-1 verdict and the final one (`FAIL → PASS`), never the final one alone**:
139
+ a first-round FAIL is the highest-value evidence the gate produces (§When a
140
+ review is due), and collapsing it into a bare `PASS` erases exactly that.
141
+
114
142
  ## Reviewing
115
143
 
116
144
  When you are the reviewer:
@@ -123,6 +151,21 @@ When you are the reviewer:
123
151
  (see `## Requesting`).
124
152
  - Cite evidence as `file:line` for every finding — a finding without a
125
153
  location is not actionable.
154
+ - **An unproven completion claim is a finding** (closure reviews, on the diff).
155
+ When the work under review states or implies that something passes, is fixed,
156
+ is clean or is complete, the evidence must be present and must post-date the
157
+ final relevant change; a claim resting on a stale run, on a narrower check
158
+ than the claim needs, or on a delegated agent's own report rather than the
159
+ diff, is a finding — name the claim and what would prove it. This is the
160
+ enforcement point of the author-side rule in `SKILL.md` §5 Closure, and the
161
+ reason a requester hands it over is that the reviewer cannot cite a rule it
162
+ was never given.
163
+ - **Say what you could NOT verify.** When a claim in the artifact cannot be
164
+ verified from the inputs you were given (it lives in unchanged code, another
165
+ document, or an environment you cannot reach), report it as a
166
+ `CANNOT VERIFY` item instead of silently passing it — the requester holds
167
+ the context to resolve it, and must do so before closing. A PASS that
168
+ silently skipped unverifiable claims is review theater.
126
169
  - Keep severity honest: do not inflate a style preference to a blocker, and
127
170
  do not soften a real correctness or security issue to a nit.
128
171
  - No praise padding. A review reports problems and their fixes, not a
@@ -507,8 +507,8 @@ adds values to the existing columns rather than a second table.
507
507
 
508
508
  | date | doc_key | tier | reviewer | findings_raised | findings_real | verdict | revise_rounds |
509
509
  |---|---|---|---|---|---|---|---|
510
- | 2026-06-11 | ANALYSIS_login_sso.md | design | subagent (opus, fresh ctx) | 4 | 3 | PASS | 2 |
511
- | 2026-06-12 | diff feature/sso-login | closure | self-pass (declared; no subagent facility) | 2 | 2 | PASS | 1 |
510
+ | 2026-06-11 | ANALYSIS_login_sso.md | design | subagent (opus, fresh ctx) | 4 | 3 | FAIL → PASS | 2 |
511
+ | 2026-06-12 | diff feature/sso-login | closure | self-pass (declared; no subagent facility) | 2 | 2 | PASS with findings → corrections re-reviewed, PASS | 2 |
512
512
 
513
513
  ## Notes
514
514
  <!-- One short paragraph per review that found something worth remembering: what
@@ -527,6 +527,13 @@ records the realization actually used — fresh subagent, one-shot client run, o
527
527
  honest; writing nothing, or implying independence you did not have, is the failure
528
528
  this column exists to prevent. `findings_real` is how many raised findings survived
529
529
  triage: over time it is the only evidence of whether the gate earns its cost.
530
+ `revise_rounds` counts **review rounds**, not fix cycles: the first review is round 1
531
+ and every scoped re-review adds one. A review that produced findings which were then
532
+ corrected therefore always reads ≥ 2 — the corrections are unreviewed work until a
533
+ round verifies them (`review.md` §Receiving) — and 3 is the ceiling, past which the
534
+ residue goes to the user rather than into a fourth round. `verdict` carries the
535
+ round-1 verdict and the final one when they differ (`FAIL → PASS`): collapsing a
536
+ first-round FAIL into a bare `PASS` erases the evidence this log exists to keep.
530
537
  Concurrent reviews: `init` writes a `.gitattributes` stanza giving this file
531
538
  `merge=union` — a **built-in** driver (no per-clone `git config`, unlike
532
539
  `merge=ours`, which silently does nothing until every clone configures it).