@antoneeo/mkt-agentic-sdlc-skill 0.2.1 → 0.3.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 +96 -22
- package/README.md +67 -57
- package/gemini-extension.json +6 -6
- package/package.json +50 -45
- package/scripts/init.js +207 -147
- package/scripts/lib.js +66 -3
- package/scripts/postinstall.js +42 -42
- package/scripts/preuninstall.js +17 -17
- package/skills/mkt-agentic-sdlc/ENFORCEMENT.md +116 -82
- package/skills/mkt-agentic-sdlc/SKILL.md +236 -201
- package/skills/mkt-agentic-sdlc/dispatch.md +87 -0
- package/skills/mkt-agentic-sdlc/elicitation.md +147 -89
- package/skills/mkt-agentic-sdlc/frameworks.md +105 -105
- package/skills/mkt-agentic-sdlc/guides.md +287 -0
- package/skills/mkt-agentic-sdlc/research.md +110 -104
- package/skills/mkt-agentic-sdlc/review.md +180 -73
- package/skills/mkt-agentic-sdlc/routing.md +100 -0
- package/skills/mkt-agentic-sdlc/scripts/mkt_check.py +703 -567
- package/skills/mkt-agentic-sdlc/scripts/sdlc_core.py +1996 -0
- package/skills/mkt-agentic-sdlc/templates.md +616 -444
- package/skills/mkt-agentic-sdlc/vision.md +245 -0
|
@@ -1,73 +1,180 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
- **
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
# Review Discipline
|
|
2
|
+
|
|
3
|
+
The single definition of how to request, receive, and perform a review. Other
|
|
4
|
+
places that need review behavior point here instead of restating it (DRY) —
|
|
5
|
+
including devPNT's §4.5/§4.6 gates and any future review step.
|
|
6
|
+
|
|
7
|
+
## When a review is due
|
|
8
|
+
|
|
9
|
+
Two moments, and they review different things:
|
|
10
|
+
|
|
11
|
+
| # | Moment | Object | Level |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| **1. Design review** | End of Phase 3 — **before any implementation** | the ANALYSIS (Standalone) / the `E-ISP`+`E-TDD` (Hybrid) | L3 |
|
|
14
|
+
| **1b. Late arrival** | Work that became L3 *after* code existed — an L1/L2 reclassified mid-flight, or a design increment on a feature already implemented — runs moment 1 **now**, before any further implementation, logged `design (late)` | same | L3 |
|
|
15
|
+
| **2. Closure review** | Phase 5, before DONE | the actual diff, against that approved design | L2 / L3 — the L2 row is optional |
|
|
16
|
+
|
|
17
|
+
**Why the design review is its own moment, and not a nicety.** The closure review
|
|
18
|
+
can only tell you the code matches the design; it cannot tell you the design was
|
|
19
|
+
wrong. An omission in the design — an impacted file nobody listed, a threat with no
|
|
20
|
+
answering requirement, a capability ruled EXISTS on an assumption — is *cheapest*
|
|
21
|
+
to fix before code exists and most expensive after. And the author cannot catch it:
|
|
22
|
+
a self-review runs in the context that produced the omission and is structurally
|
|
23
|
+
blind to it, which is why independence, not effort, is what this gate buys.
|
|
24
|
+
|
|
25
|
+
**Independence, best realization the client supports** — declare which one you used:
|
|
26
|
+
|
|
27
|
+
1. **A fresh subagent** (Claude Code's Task tool, or the equivalent facility) with
|
|
28
|
+
its own context, given the artifacts below and nothing from this conversation.
|
|
29
|
+
2. **A one-shot run of the client itself** (`gemini -p "…"`, `codex exec "…"`) with
|
|
30
|
+
a SELF-CONTAINED prompt — the reviewer session has no other context, which is
|
|
31
|
+
exactly what makes it independent.
|
|
32
|
+
3. **A declared self-pass** — a separate, explicitly adversarial pass by you,
|
|
33
|
+
against the same checklist. **Rung 3 is illegitimate wherever rung 1 or 2
|
|
34
|
+
exists**: on a client with a subagent facility or a one-shot CLI, descending to
|
|
35
|
+
it is choosing zero independence, which is the one thing this gate buys. When
|
|
36
|
+
you do use it, the log row must carry *why* — `self-pass (declared; no subagent
|
|
37
|
+
facility on this client)` — not merely that you did. A rung named without its
|
|
38
|
+
reason is indistinguishable from a rung chosen for convenience.
|
|
39
|
+
|
|
40
|
+
Rung 3 stays in the ladder deliberately: it is what keeps the methodology
|
|
41
|
+
completable with no network, no account and no subagent facility. It is a floor,
|
|
42
|
+
never a default.
|
|
43
|
+
|
|
44
|
+
Use a different model from the author's where the client allows it.
|
|
45
|
+
|
|
46
|
+
**Rounds are capped at 3.** FAIL → revise → re-review. If findings still stand
|
|
47
|
+
after the third, stop and surface them to the user with the artifact — a gate that
|
|
48
|
+
can block forever gets removed. **Log one row per completed review, PASS or FAIL**
|
|
49
|
+
— a FAIL surfaced to the user is the highest-value outcome the gate produces, and
|
|
50
|
+
logging only passes would erase exactly that evidence. The row goes in
|
|
51
|
+
`ai_docs/audit/reviews/REVIEW_LOG.md` (create it if absent — `templates.md`):
|
|
52
|
+
`| date | doc_key | tier | reviewer | findings_raised | findings_real | verdict | revise_rounds |`,
|
|
53
|
+
with `tier` = `design` or `closure` in Standalone. One schema for both modes: a
|
|
54
|
+
Hybrid project's devPNT gates write to the same file.
|
|
55
|
+
The log is how the gate's value is measured over time; skipping it makes the gate
|
|
56
|
+
unfalsifiable, the same defect as an unnamed EXISTS or a faked router verdict.
|
|
57
|
+
|
|
58
|
+
**The reviewer is read-only and advisory.** It never edits, never commits, never
|
|
59
|
+
marks anything DONE, and a PASS is not an approval to merge — the human owns that.
|
|
60
|
+
|
|
61
|
+
## Requesting
|
|
62
|
+
|
|
63
|
+
When you hand work to a reviewer (human or agent), give them:
|
|
64
|
+
|
|
65
|
+
- **Scope**: what changed and why, in one or two lines.
|
|
66
|
+
- **The authoritative design artifact**: the ANALYSIS, E-TDD, or equivalent
|
|
67
|
+
the change was built against — not a paraphrase of it.
|
|
68
|
+
- **The actual diff**: the real changed files, not a description of them. (For a
|
|
69
|
+
**design** review there is no diff yet — that is the point; hand the artifact
|
|
70
|
+
plus the constraints below, and say the object under review is the design.)
|
|
71
|
+
- **For an impact/solution-analysis review, the constraints it derives from**:
|
|
72
|
+
the **Vision**, including its `## Actors` (Hybrid: the `M-VISION`; Standalone:
|
|
73
|
+
`project_vision.md`/`roadmap.md` + the ANALYSIS Vision-Alignment), the
|
|
74
|
+
**use-cases / user-needs** (Hybrid: `D-UC`;
|
|
75
|
+
Standalone: the ANALYSIS `## Use Cases / User Needs`), and the **threat model**
|
|
76
|
+
(Hybrid: `P-TM`; Standalone: the ANALYSIS `## Security and Threat Model`). Hand these
|
|
77
|
+
*in addition to* the design artifact — the reviewer checks the artifact **against**
|
|
78
|
+
them, not only for internal consistency.
|
|
79
|
+
- **For a design review, the threat model too** (same sources as above). Why this
|
|
80
|
+
one and not the whole set: file coverage crosses the impact-analysis→design hop on
|
|
81
|
+
a mechanical gate (every impacted file needs a design block), so a dropped file is
|
|
82
|
+
caught; **threats have no such gate** — a threat answered in the impact analysis
|
|
83
|
+
can silently fail to become a security requirement in the design, and the later
|
|
84
|
+
code review only verifies the requirements that are there, never the ones that
|
|
85
|
+
should have been. The design reviewer checks that every threat surface the change
|
|
86
|
+
touches has a matching security requirement.
|
|
87
|
+
|
|
88
|
+
**The verdict travels back as the reviewer's own final output** — the text it
|
|
89
|
+
returns when it finishes, nothing else. A reviewer that tries to message the
|
|
90
|
+
requester mid-run depends on a delivery channel it cannot verify (a subagent
|
|
91
|
+
addressed by agent TYPE rather than by session gets no such channel, and the
|
|
92
|
+
attempt fails silently); a requester that waits for such a message stalls
|
|
93
|
+
holding a verdict that already exists. State the return form when you request
|
|
94
|
+
the review, and read the verdict where it actually arrives.
|
|
95
|
+
|
|
96
|
+
Never ask a reviewer to "review my session" or "review what I just did"
|
|
97
|
+
without the artifacts above — that forces them to reconstruct scope from
|
|
98
|
+
conversation instead of reviewing the change itself. Say which finding
|
|
99
|
+
classes you want covered (correctness, security, conformance to the design,
|
|
100
|
+
test coverage) if the default scope is not obvious.
|
|
101
|
+
|
|
102
|
+
## Receiving
|
|
103
|
+
|
|
104
|
+
**MUST answer findings one by one — fix, or justify with evidence; why:
|
|
105
|
+
silent drops turn review into theater** — a review whose findings are not
|
|
106
|
+
tracked to a resolution gives the appearance of quality control without its
|
|
107
|
+
substance.
|
|
108
|
+
|
|
109
|
+
If you disagree with a finding, say so explicitly with your reasoning; never
|
|
110
|
+
resolve a disagreement by rewording the finding until it goes away. When the
|
|
111
|
+
project keeps a `REVIEW_LOG` (or equivalent), log the outcome of each
|
|
112
|
+
finding there.
|
|
113
|
+
|
|
114
|
+
## Reviewing
|
|
115
|
+
|
|
116
|
+
When you are the reviewer:
|
|
117
|
+
|
|
118
|
+
- Verify claims against the real source, not against the diff's own
|
|
119
|
+
description of itself.
|
|
120
|
+
- **Your verdict is your final output.** Deliver findings and verdict as the text
|
|
121
|
+
you return when you finish — never only through a message to the requester, a
|
|
122
|
+
channel you cannot verify and which fails silently when it is not there
|
|
123
|
+
(see `## Requesting`).
|
|
124
|
+
- Cite evidence as `file:line` for every finding — a finding without a
|
|
125
|
+
location is not actionable.
|
|
126
|
+
- Keep severity honest: do not inflate a style preference to a blocker, and
|
|
127
|
+
do not soften a real correctness or security issue to a nit.
|
|
128
|
+
- No praise padding. A review reports problems and their fixes, not a
|
|
129
|
+
summary of what looks fine.
|
|
130
|
+
- **Conformance statement (impact/solution-analysis & design reviews only — not a
|
|
131
|
+
plain code-diff review).** When the artifact under review carries Vision / use-case
|
|
132
|
+
/ threat-model constraints, your output MUST map each constraint to its evidence: for
|
|
133
|
+
every use-case/user-need (and the Actor it serves — a use-case with no defined Actor,
|
|
134
|
+
or an Actor UX expectation the solution does not meet, is a finding), every threat, and
|
|
135
|
+
every applicable Vision benefit/Non-Goal, state WHERE the artifact satisfies it (section
|
|
136
|
+
or `file:line`) or raise it as a finding. A PASS/approve is **not valid on "found nothing"** — the conformance
|
|
137
|
+
statement is the proof the check ran; an unfalsifiable "I checked" is the review
|
|
138
|
+
theater this discipline exists to prevent (the reviewer-side twin of §Receiving's
|
|
139
|
+
silent-drop rule). Plain code reviews stay findings-only.
|
|
140
|
+
- **Restated facts (cite, never copy).** Every governance slot has ONE owning document
|
|
141
|
+
per project. A fact restated in the artifact under review when another document owns
|
|
142
|
+
it is a **finding**: the fix is a citation naming the owner, not a better copy. This
|
|
143
|
+
binds the conformance statement too — where a constraint is satisfied by another
|
|
144
|
+
document, name that document as the evidence instead of repeating what it says. Two
|
|
145
|
+
copies of one fact diverge at the first edit, and the reader then has no way to tell
|
|
146
|
+
which one is current. The rule bites hardest across domains, where the same slot
|
|
147
|
+
("threat model", "vision", "handoff") carries a different meaning under each lens and
|
|
148
|
+
a copy looks like an independent second source.
|
|
149
|
+
- **Capability Ledger (same reviews).** **An L3 impact/solution analysis or design
|
|
150
|
+
that carries NO Capability Ledger is itself a finding** — the lens's capability
|
|
151
|
+
pass (`architect.md` in the code lens, `taxonomy.md` in the knowledge lens) left
|
|
152
|
+
no record, and "the artifact does not have one" is what a skipped pass looks like,
|
|
153
|
+
not a reason to skip the check. (This half is load-bearing in Hybrid, where the
|
|
154
|
+
validator backstop reads Standalone ANALYSIS files only and this clause is the
|
|
155
|
+
sole check that the pass ran.) When the ledger is there, map each
|
|
156
|
+
ledger row to where the design or diff realizes it. Three findings live here and
|
|
157
|
+
nowhere else (the capability-pass file named above): a capability ruled MISSING but implemented inside
|
|
158
|
+
the feature's code path, with no component owning it; a component whose contract
|
|
159
|
+
names the feature (a second consumer would force it open); and a capability ruled
|
|
160
|
+
MISSING, not built, and absorbed by quietly reshaping the feature — that is a
|
|
161
|
+
scope change owed to the user, not a design detail. An EXISTS row with no named
|
|
162
|
+
path or symbol is itself a finding. A capability built in this change and absent
|
|
163
|
+
from the `## Component Map` (`strategic/architecture.md`, where the lens keeps one) is a finding too — and
|
|
164
|
+
so is **a component the pass merely DISCOVERED and did not write**, especially
|
|
165
|
+
when the change marks that area ANALYZED: the area now looks read, the map is
|
|
166
|
+
still silent, and the next feature may lawfully rule the capability MISSING and
|
|
167
|
+
build it twice. And a **MISSING row in an area `audit/audit_plan.md` does not
|
|
168
|
+
mark ANALYZED, with no searches named**, is the finding that matters most on a
|
|
169
|
+
project the methodology arrived in recently — an unread map reported as an empty
|
|
170
|
+
one is how a duplicate of the existing codebase gets designed.
|
|
171
|
+
|
|
172
|
+
## Anti-patterns
|
|
173
|
+
|
|
174
|
+
- **Batch-dismissal**: closing out a whole findings list with one blanket
|
|
175
|
+
reply instead of addressing each finding individually.
|
|
176
|
+
- **Rewording instead of addressing**: editing the finding's text to look
|
|
177
|
+
resolved without changing the code or providing evidence it is a
|
|
178
|
+
non-issue.
|
|
179
|
+
- **Scope-creep findings**: raising issues unrelated to the change under
|
|
180
|
+
review instead of filing them separately.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Domain Routing — which lens owns this unit of work
|
|
2
|
+
|
|
3
|
+
The family ships as sibling skills built from one shared core: each lens carries its
|
|
4
|
+
own **fidelity discipline** (what the work must be faithful to) and its own validation
|
|
5
|
+
rules, over **one** `ai_docs/` tree. This file answers one question: *which lens's
|
|
6
|
+
method governs THIS unit of work?* It does not decide where the resulting file is
|
|
7
|
+
stored (step 5), and it never runs before the triage level is known — L1 never
|
|
8
|
+
reaches it.
|
|
9
|
+
|
|
10
|
+
## 0. Installed-lens detection — run first, fail open
|
|
11
|
+
|
|
12
|
+
Look in the skills directory this skill was loaded from for sibling lenses of the
|
|
13
|
+
family, identified by the `name:` in their `SKILL.md`:
|
|
14
|
+
|
|
15
|
+
| Lens | Skill name | Faithful to |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| code | `agentic-sdlc` | this repository's code |
|
|
18
|
+
| knowledge | `kb-agentic` | documents the user supplied |
|
|
19
|
+
| marketing | `mkt-agentic-sdlc` | market evidence |
|
|
20
|
+
|
|
21
|
+
- **No sibling installed, or the directory cannot be read** → the router does NOT run.
|
|
22
|
+
Work under the loaded lens; read no further. This is the normal single-lens case and
|
|
23
|
+
it costs nothing.
|
|
24
|
+
- **At least one sibling installed** → run the router below, after the level test, on
|
|
25
|
+
every L2, L3 and Spike.
|
|
26
|
+
|
|
27
|
+
Fail-open is deliberate: a detection that cannot answer must never block the work. A
|
|
28
|
+
single-lens project that silently gains a router verdict it cannot act on is worse
|
|
29
|
+
than no verdict at all.
|
|
30
|
+
|
|
31
|
+
## 1. The router
|
|
32
|
+
|
|
33
|
+
Run the steps in order. Stop at the first one that decides.
|
|
34
|
+
|
|
35
|
+
1. **Fidelity / purpose.** What must the work be faithful to?
|
|
36
|
+
- *This repository's code* → provisional **code**; continue to step 2.
|
|
37
|
+
- *Documents the user supplied* → **knowledge**. Decided.
|
|
38
|
+
- *Market evidence* → **marketing**. Decided.
|
|
39
|
+
- *A deliverable whose purpose is market-facing persuasion* (copy, positioning,
|
|
40
|
+
campaign material) → **marketing regardless of source**. Decided. Without this
|
|
41
|
+
branch the marketing lens is reachable only when the *source* is market evidence,
|
|
42
|
+
never when the *purpose* is marketing — and the launch post written from the
|
|
43
|
+
release notes routes to code.
|
|
44
|
+
|
|
45
|
+
2. **Deliverable class** — only on the provisional `code` branch. The predicate is on
|
|
46
|
+
the deliverable, not on its audience:
|
|
47
|
+
- *Part of this repository's own document set, shipping and maintained with the
|
|
48
|
+
code* (`ai_docs/`, README, CHANGELOG, comprehension guides, migration notes) →
|
|
49
|
+
**code**; continue to step 3.
|
|
50
|
+
- *A standalone knowledge deliverable whose fidelity extends beyond this repo's
|
|
51
|
+
code* (user documentation for an external audience, a distilled corpus) →
|
|
52
|
+
**knowledge**. Decided; step 3 is not reached.
|
|
53
|
+
|
|
54
|
+
3. **Build-consumed override** — only on the provisional `code` branch, never
|
|
55
|
+
overriding a *marketing* or *supplied-documents* verdict. *Is the deliverable a
|
|
56
|
+
file the project's build or test toolchain consumes?* Executable or imported
|
|
57
|
+
source: yes. Committed Markdown: no. A yes confirms **code**.
|
|
58
|
+
|
|
59
|
+
4. **Split rule.** A request whose work must be faithful to two sources is **two units
|
|
60
|
+
of work**, split before routing: the distillation (knowledge) and the design that
|
|
61
|
+
cites it (code) each route alone. The router returns one lens per unit; it never
|
|
62
|
+
returns two lenses for one unit.
|
|
63
|
+
|
|
64
|
+
5. **Owning tree.** A straddling artifact keeps its lens for *method* and takes this
|
|
65
|
+
repository's tree and validator for *storage*. Lens and location are separate
|
|
66
|
+
answers — a marketing-lens document written in a code repository still lives in
|
|
67
|
+
that repository's `ai_docs/` and passes that project's validator.
|
|
68
|
+
|
|
69
|
+
6. **Cross-check.** If the verdict contradicts an installed skill's `description`, the
|
|
70
|
+
descriptions are wrong: fix them. Never silently override the test with a
|
|
71
|
+
description.
|
|
72
|
+
|
|
73
|
+
## 2. Worked verdicts
|
|
74
|
+
|
|
75
|
+
| Request | 1 | 2 | 3 | Lens |
|
|
76
|
+
|---|---|---|---|---|
|
|
77
|
+
| "write the API reference docs" (hand-written, ships with the repo) | code | repo's own doc set → code | not build-consumed → no flip | **code** |
|
|
78
|
+
| "write user documentation for our customers' admins" | code | standalone knowledge deliverable → knowledge | n/a (left the code branch at 2) | **knowledge** |
|
|
79
|
+
| "write the API reference docs" (generated — the work edits docstrings in source) | code | repo's own doc set → code | **build-consumed: yes → confirms code** | **code** |
|
|
80
|
+
| "write a comprehension guide for the auth module" | code | repo's own doc set → code | not build-consumed → no flip | **code** |
|
|
81
|
+
| "turn these vendor specs into a technical design" | split (step 4): spec = supplied docs; design = this repo | — | — | **knowledge** for the distillation; **code** for the design, citing it |
|
|
82
|
+
| "write the pricing page copy from our market research" | **purpose: market-facing → marketing** | never reached | never reached | **marketing**; stored in this repo's tree (step 5) |
|
|
83
|
+
| "write the launch blog post from the release notes" | purpose: market-facing → marketing | never reached | never reached | **marketing** |
|
|
84
|
+
|
|
85
|
+
## 3. Acting on the verdict
|
|
86
|
+
|
|
87
|
+
The verdict binds the **method and the validation rules**, not the storage:
|
|
88
|
+
|
|
89
|
+
- **Verdict = the loaded lens** → continue; nothing changes.
|
|
90
|
+
- **Verdict = a sibling lens** → say so, and work that unit under the sibling's method
|
|
91
|
+
and its rule set (its templates, its mandatory risk section — code
|
|
92
|
+
`## Security and Threat Model`, knowledge `## Sources and Verification`, marketing
|
|
93
|
+
`## Threat Map / Plan Risks`). The artifact is written with an explicit
|
|
94
|
+
`domain:` field so the answer survives the session, and it stays in this project's
|
|
95
|
+
`ai_docs/` tree (step 5).
|
|
96
|
+
- **The unit was split** (step 4) → route and declare each half separately.
|
|
97
|
+
|
|
98
|
+
Documents under `vision/` — the project vision, principles, the roadmap — sit **above**
|
|
99
|
+
the domain split: they belong to no lens and are validated by the core's structural
|
|
100
|
+
rules only. The router is not consulted for them.
|