@antoneeo/agentic-sdlc-skill 1.17.0 → 1.20.2

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.
@@ -14,12 +14,15 @@ Every durable canonical document opens with this frontmatter: it feeds the gener
14
14
  description: One line — what the document is and when to read it.
15
15
  status: CURRENT # CURRENT | SUPERSEDED | DRAFT | DEPRECATED
16
16
  supersedes: old_doc.md # only if it replaces another canonical doc
17
+ domain: code # optional — code | knowledge | marketing; omit in a single-domain project
17
18
  ---
18
19
  # Document Title
19
20
  ```
20
21
 
21
22
  When a doc replaces another: the new one declares `supersedes:`, the old one switches to `status: SUPERSEDED` (it stays as history, do not delete it). `sdlc_check.py validate` warns if `status` is missing or if a superseded doc is still `CURRENT`.
22
23
 
24
+ **`domain:` — write it only when it says something.** It names the domain whose fidelity discipline the document was written under, and it *records* an answer the work already has; it never decides one. Omit it and the project default applies (`default_domain:` in `ai_docs/README.md`, absent → `code`), so a single-domain project never writes the field at all. Documents under `vision/` sit above the split and take no `domain:`. In a mixed project, a wrong or forgotten field surfaces as a validation error on the missing mandatory risk section — never as a silent pass.
25
+
23
26
  ## ai_docs/reference/GUIDE_[topic].md
24
27
 
25
28
  A guide is either OPERATIVE (`source_kind: document` — distilled from USER-PROVIDED
@@ -72,6 +75,9 @@ Section repertoire (pick what the source supports):
72
75
  Curated must-read index, by hand (it is NOT the generated manifest). Created at init, updated rarely, only for real must-reads.
73
76
 
74
77
  ```markdown
78
+ ---
79
+ default_domain: code
80
+ ---
75
81
  # ai_docs — reading guide
76
82
 
77
83
  Must-reads for this project, in order. The full manifest of canonical docs is
@@ -87,6 +93,8 @@ feature catalog), `reference/` (operative guides), `solutions/` (per-feature
87
93
  analyses, discovery-by-grep), `audit/` (audit plan and handoff).
88
94
  ```
89
95
 
96
+ `default_domain:` is the project's answer for every document that does not declare its own `domain:`. Whichever lens's `init` created the project seeds it; a later init never overwrites it, and an absent line resolves to `code` — so every project created before this field existed keeps behaving exactly as it did. It is written once, at project level, precisely so that the same tree gets **the same verdict from every installed lens**.
97
+
90
98
  ## ai_docs/vision/project_vision.md
91
99
 
92
100
  A Vision states **the benefit to be obtained while leaving the most degrees of
@@ -208,6 +216,8 @@ Only for features spanning multiple ANALYSIS documents or multiple milestones: o
208
216
 
209
217
  The frontmatter is the source of truth for the feature state (the `features_history.md` index is generated from it).
210
218
 
219
+ `domain:` and `checks:` are optional and only earn their place in a project where more than one lens is installed (see the canonical-header note above for how an omitted `domain:` resolves). `checks:` names **portable checks** imported from another domain — e.g. `domain: knowledge` with `checks: [marketing.funnel]`. An imported check can only ADD findings, never relax what the owning domain requires, so importing one is always safe; naming a check this installation does not carry produces a visible warning, never a silent pass. `id:` is unique **within a domain**, and its prefix says which: `F-` code, `K-` knowledge, `M-` marketing. Projects that predate the prefixes keep their `F-` ids — uniqueness was already scoped to the one domain they have.
220
+
211
221
  ```markdown
212
222
  ---
213
223
  id: F-001
@@ -216,6 +226,8 @@ status: PLANNED
216
226
  level: L3
217
227
  start_date: 2026-06-11
218
228
  end_date:
229
+ domain: code # optional — code | knowledge | marketing
230
+ checks: [marketing.funnel] # optional — extra portable checks to run on this document
219
231
  ---
220
232
  # Feature Analysis: [Name]
221
233
 
@@ -238,8 +250,27 @@ end_date:
238
250
  use-case = what they do. Derived from the elicitation round; the Impact below
239
251
  must cover each, and the closure review checks coverage + actor UX fit. -->
240
252
 
253
+ ## Capability Ledger
254
+ <!-- the architect pass (`architect.md`), run BEFORE the Impact below. One row per
255
+ capability the feature requires the system to be able to DO — a verb over a
256
+ domain noun, naming no file. Verdict EXISTS (name the component and where) /
257
+ INADEQUATE (same, plus the gap) / MISSING (say what you searched). Every
258
+ INADEQUATE or MISSING row becomes a component with its own contract, stated
259
+ without naming this feature, and lands in the Impact below. Evidence is what
260
+ makes a verdict falsifiable: for EXISTS/INADEQUATE the one guarantee you
261
+ re-read to confirm it; for MISSING the terms, the tool and the areas searched
262
+ (and say "provisional" when the area is still PENDING in the audit plan).
263
+ A question, not a form: when every capability plainly exists, one line under
264
+ this heading answers it — still naming the component and where it lives. -->
265
+
266
+ | Capability | Verdict | Component / gap | Evidence |
267
+ |---|---|---|---|
268
+ | persist an order | EXISTS | `path/to/store.py#OrderStore` | re-read `save()`: durable, returns the id |
269
+ | notify the customer | MISSING | — | grep notify/alert/dispatch + send, over src/ and legacy/; no owner |
270
+
241
271
  ## Impact
242
- <!-- existing files touched, APIs/contracts, performance, new dependencies -->
272
+ <!-- existing files touched, APIs/contracts, performance, new dependencies.
273
+ Derived from the ledger above: every INADEQUATE/MISSING row appears here. -->
243
274
 
244
275
  ## Security and Threat Model
245
276
  <!-- ALWAYS mandatory, also in Standalone.
@@ -368,6 +399,39 @@ Date: 2026-06-11 (UTC)
368
399
  <!-- one or two lines: release pending, environment quirks that affect everyone -->
369
400
  ```
370
401
 
402
+ ## ai_docs/audit/reviews/REVIEW_LOG.md
403
+
404
+ One row per completed review (`review.md` §When a review is due). Append-only; it
405
+ is the record that the gate ran and what it was worth. **One schema for both
406
+ modes** — a Hybrid project's devPNT gates write to this same file, so Standalone
407
+ adds values to the existing columns rather than a second table.
408
+
409
+ ```markdown
410
+ # Independent Review Log
411
+
412
+ | date | doc_key | tier | reviewer | findings_raised | findings_real | verdict | revise_rounds |
413
+ |---|---|---|---|---|---|---|---|
414
+ | 2026-06-11 | ANALYSIS_login_sso.md | design | subagent (opus, fresh ctx) | 4 | 3 | PASS | 2 |
415
+ | 2026-06-12 | diff feature/sso-login | closure | self-pass (declared; no subagent facility) | 2 | 2 | PASS | 1 |
416
+
417
+ ## Notes
418
+ <!-- One short paragraph per review that found something worth remembering: what
419
+ the findings actually were, and what changed because of them. The table
420
+ answers "was it reviewed and by what"; this answers "what did it find" —
421
+ which is where `review.md`'s per-finding outcomes live. Omit for a clean
422
+ review; a row with 0 findings needs no note. -->
423
+ ```
424
+
425
+ `tier` is the moment plus, in Hybrid, the reviewer weight: `design`, `design (late)`
426
+ and `closure` (Standalone); `deep`, `light`, `code`, `guide`, `vision` (devPNT gates
427
+ and the Vision blind check). The validator reads this column by its header name, so
428
+ extra or reordered columns are fine — but the header must say `tier`. `reviewer`
429
+ records the realization actually used — fresh subagent, one-shot client run, or a
430
+ **declared** self-pass. Writing `self-pass` where independence was unavailable is
431
+ honest; writing nothing, or implying independence you did not have, is the failure
432
+ this column exists to prevent. `findings_real` is how many raised findings survived
433
+ triage: over time it is the only evidence of whether the gate earns its cost.
434
+
371
435
  ## ai_docs/audit/HANDOFF_[feature].md — volatile resume logistics (ephemeral)
372
436
 
373
437
  **Resume logistics ONLY; the ANALYSIS Diary keeps the durable narrative (DRY).**
@@ -399,12 +463,39 @@ Canonical docs: they open with the header (`description:`/`status:`) so they ent
399
463
 
400
464
  ```markdown
401
465
  ---
402
- description: Stack, directory structure and architectural patterns of the project.
466
+ description: Stack, directory structure, component map and architectural patterns of the project.
403
467
  status: CURRENT
404
468
  ---
405
469
  # Project Architecture
406
470
  ## Technology Stack
407
471
  ## Directory Structure
472
+ ## Component Map
473
+ <!-- The inventory the architect pass reads BEFORE searching the code
474
+ (`architect.md` §2). One row per component that OWNS a capability:
475
+ Capability = what it lets the system DO (a verb over a domain noun, naming
476
+ no file). Contract = what it guarantees its consumers, in one line, stated
477
+ without naming any single consumer. Where = a path, or `path#symbol` when
478
+ the component is smaller than its file.
479
+ Seeded at bootstrap; a row is added or corrected in the SAME closure that
480
+ builds — or merely discovers — a component, and the area is marked ANALYZED.
481
+ A directory is not a component: rows name what owns a capability, not where
482
+ files sit (that is ## Directory Structure above). An absent or stale map is
483
+ why the next feature rules the same capability MISSING a second time and
484
+ builds it again. -->
485
+
486
+ Coverage: whatever `audit/audit_plan.md` marks ANALYZED — **read it, do not trust a
487
+ list restated here** (a hand-copied list is a cache with no invalidation). Outside
488
+ those areas this map is **unread, not empty**: it can never ground a MISSING
489
+ verdict, and the code is searched instead (`architect.md` §2).
490
+
491
+ | Component | Capability it owns | Contract | Where |
492
+ |---|---|---|---|
493
+ | ... | ... | ... | ... |
494
+
495
+ <!-- Where is `path/to/file.py#Symbol`. Leave the placeholder row untouched until
496
+ the map has a real component: the validator skips an all-`...` row, so a
497
+ freshly seeded project is never nagged about a table nobody has filled in. -->
498
+
408
499
  ## Architectural Patterns
409
500
  ```
410
501