@antoneeo/agentic-sdlc-skill 1.31.0 → 1.33.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/CHANGELOG.md +133 -24
- package/README.md +32 -2
- package/gemini-extension.json +6 -6
- package/package.json +51 -50
- package/scripts/lib.js +105 -0
- package/scripts/postinstall.js +13 -1
- package/skills/agentic-sdlc-skill/ENFORCEMENT.md +50 -1
- package/skills/agentic-sdlc-skill/SKILL.md +283 -354
- package/skills/agentic-sdlc-skill/dispatch.md +39 -1
- package/skills/agentic-sdlc-skill/guides.md +16 -12
- package/skills/agentic-sdlc-skill/hybrid.md +106 -0
- package/skills/agentic-sdlc-skill/review.md +80 -3
- package/skills/agentic-sdlc-skill/scripts/sdlc_check.py +11 -2
- package/skills/agentic-sdlc-skill/scripts/sdlc_core.py +293 -4
- package/skills/agentic-sdlc-skill/templates.md +15 -8
|
@@ -45,12 +45,50 @@ below — so it needs no separate dispatch hook.)
|
|
|
45
45
|
|
|
46
46
|
## Model tiers (client-relative, no provider names)
|
|
47
47
|
|
|
48
|
-
- Default dispatch: **economy** implementer tier.
|
|
48
|
+
- Default dispatch: **economy** implementer tier. This is legal precisely
|
|
49
|
+
because a dispatched task carries `task.verify` — the threshold signal that
|
|
50
|
+
makes a wrong cheap answer visible. **The floor that governs every role, and
|
|
51
|
+
the rule that a tier may be lowered only where such a signal exists, is
|
|
52
|
+
`review.md` §The capability floor** — cited, never restated here.
|
|
49
53
|
- After **two** consecutive `verify_result: fail` on the same task: escalate
|
|
50
54
|
to the **deep** tier for the retry (ADR 2026-07-02). Do not escalate on the
|
|
51
55
|
first failure — a single fail is often a brief or environment issue, not a
|
|
52
56
|
capability gap.
|
|
53
57
|
|
|
58
|
+
## What may be delegated at all
|
|
59
|
+
|
|
60
|
+
The sections above govern the opt-in PLAN loop; **this one is family-wide** and
|
|
61
|
+
applies to any pass, at any level, dispatch or no dispatch. Delegation is not a
|
|
62
|
+
token-saving technique — a second context re-reads, re-briefs and reports back,
|
|
63
|
+
so the total spend goes UP. What it buys is a main context that stays clean, and
|
|
64
|
+
independence where independence is the point. Judge a pass on two axes:
|
|
65
|
+
|
|
66
|
+
| | output falsifiable cheaply (`file:line`, an assertion result, a diff) | output is judgement |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| **reads ≫ report** | **delegate** — the whole win lives here | **never**: the biggest apparent win is where plausible-but-wrong enters |
|
|
69
|
+
| **reads ≈ report** | keep it: the brief costs more than the pass | keep it |
|
|
70
|
+
|
|
71
|
+
- **Delegate**: locating and verifying (a pass that returns citable facts and
|
|
72
|
+
discards its exploration trace), executing a probe or battery and reporting
|
|
73
|
+
the assertion table, and every independent review — the last for correctness,
|
|
74
|
+
not economy, and it is mandatory regardless of what it costs.
|
|
75
|
+
- **Never delegate**: authoring a governed artifact (Vision, ANALYSIS/E-ISP,
|
|
76
|
+
threat model, use cases, the Interface Contract), the triage level and router
|
|
77
|
+
verdict, a reconciliation or scope decision, and any pass whose result the
|
|
78
|
+
orchestrator must hold across many later turns — delegating that one just
|
|
79
|
+
moves the reading into the main context via the report.
|
|
80
|
+
- **The delegability condition**: a task whose brief cannot be expressed as
|
|
81
|
+
**pointers** — paths, ids, a command — is **not delegable** yet; a brief that
|
|
82
|
+
must carry the content pays those tokens twice, once to write it and once to
|
|
83
|
+
read it. `plan brief` is this rule already realized for the PLAN loop (it
|
|
84
|
+
prints `guides` as paths, never pasted content); the condition generalizes it.
|
|
85
|
+
|
|
86
|
+
**Declared residual**, so the silence is not read as prohibition: this section
|
|
87
|
+
settles the CLASSIFICATION. *When* to reach for a delegated search or
|
|
88
|
+
orientation pass — the trigger, its brief format and its output contract — is a
|
|
89
|
+
separate unit and is not answered here; until it lands, reaching for one is the
|
|
90
|
+
orchestrator's judgement against the table above, not a rule.
|
|
91
|
+
|
|
54
92
|
## Review slots — one-shot, not iterative
|
|
55
93
|
|
|
56
94
|
Exactly three review touches per task, never a loop:
|
|
@@ -60,6 +60,10 @@ already cover how to do this well?*
|
|
|
60
60
|
match was not targeted (T7). Two guides are legitimate only when they cover
|
|
61
61
|
distinct concerns — typically an operative guide plus the comprehension map of
|
|
62
62
|
the component being touched; three is a smell, not a thorough lookup.
|
|
63
|
+
- **Check a `code` guide against the code before you trust it.** No check can do
|
|
64
|
+
this for you (§6): the reader is the only one who sees that the map and the
|
|
65
|
+
component have parted. A divergence you observe is yours to close in the same
|
|
66
|
+
unit of work.
|
|
63
67
|
- **Under subagent dispatch** the consult happens at plan-authoring time (the
|
|
64
68
|
orchestrator populates each task's `guides` field); a context-free subagent
|
|
65
69
|
reads the pointers it was handed and does not run its own router lookup. See
|
|
@@ -271,17 +275,17 @@ state it explicitly when handing off a newly created guide.
|
|
|
271
275
|
|
|
272
276
|
## 6. Maintenance
|
|
273
277
|
|
|
274
|
-
- **Source changed**:
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
and
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
278
|
+
- **Source changed**: new snapshot, regenerate the guide from it (new
|
|
279
|
+
`source_hash`); a guide REPLACING another is `status: SUPERSEDED` on the old
|
|
280
|
+
one. `sdlc_check.py stale` (also under `--hybrid`) reports `[stale]` when a
|
|
281
|
+
guide's recorded hash and its snapshot file diverge — the signal to regenerate.
|
|
282
|
+
- **`source_kind: code` freshness is NOT mechanized.** `stale` compares the guide
|
|
283
|
+
to its snapshot, and a code snapshot is a frozen copy — so a map whose component
|
|
284
|
+
was rewritten reports FRESH forever (measured 2026-09-06: +388/-71 lines in the
|
|
285
|
+
guided module, `stale` silent). The duty is therefore the author's, twice: when
|
|
286
|
+
you MODIFY code a comprehension guide describes, refresh the guide in the same
|
|
287
|
+
closure (docs travel with the code); when you merely READ one, check it against
|
|
288
|
+
the code before trusting it. Too large to absorb → mark it `SUPERSEDED` rather
|
|
289
|
+
than leave a confident-wrong map badged CURRENT, which is worse than none.
|
|
286
290
|
- **Agent-global KB guides** use the same pipeline and validator via
|
|
287
291
|
`--root ~/.agentic-sdlc`; freshness via the same `stale` engine.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# The Hybrid Seam — coexistence with devPNT
|
|
2
|
+
|
|
3
|
+
**For whom**: the agent working a project where the `devpnt_*` tools are available
|
|
4
|
+
and point at this project.
|
|
5
|
+
**Answers**: "which mode am I in, who owns what when both authorities are live,
|
|
6
|
+
and how do the two vocabularies map onto each other".
|
|
7
|
+
**Does not answer**: the process itself — triage, the phases, the gates and the
|
|
8
|
+
write triggers are `SKILL.md`'s, and they are identical in both modes.
|
|
9
|
+
|
|
10
|
+
Moved out of `SKILL.md` by F-051 so a Standalone session stops paying for a seam
|
|
11
|
+
it cannot reach. **The content below is unchanged**: this file is a relocation,
|
|
12
|
+
not a rewrite.
|
|
13
|
+
|
|
14
|
+
<!-- moved-block-sha256: f11e6d5b9cd4710849fa9d3701f16ff0da39f2d163e8ffdb8adbff6a119b3614 -->
|
|
15
|
+
### Hybrid in symbiosis with devPNT
|
|
16
|
+
|
|
17
|
+
Use this mode when the `devpnt_*` tools are available and point at the current project.
|
|
18
|
+
|
|
19
|
+
Authoritative hierarchy:
|
|
20
|
+
1. **devPNT M-VISION**: strategic beacon of the milestone. Before design or code, read it and verify benefits, success signals, scope-in and non-goals.
|
|
21
|
+
2. **devPNT Master Plan**: strategic roadmap and milestones.
|
|
22
|
+
3. **devPNT Action Plan**: current tactical work for the active goal.
|
|
23
|
+
4. **devPNT governed artifacts**: `D-UC`, `P-TM`, `E-ISP`, `E-TDD`, `E-TP`, ADR.
|
|
24
|
+
5. **Local `ai_docs/`**: readable context, Standalone fallback, local handoff or shadow/mirror when useful.
|
|
25
|
+
|
|
26
|
+
Hybrid rules:
|
|
27
|
+
- devPNT is the governed source for plans and artifacts; do not create a second truth in `ai_docs/`.
|
|
28
|
+
- The skill stays autonomous: if devPNT is not there, switch to Standalone without losing capability.
|
|
29
|
+
- If the user request, the local Vision and the M-VISION diverge, stop and make the conflict explicit.
|
|
30
|
+
- Do not create or modify milestones without respecting the M-VISION.
|
|
31
|
+
- Never auto-accept devPNT proposals: present the preview and wait for explicit confirmation.
|
|
32
|
+
- If the local devPNT protocol imposes stricter bootstrap, plans or gates, follow them.
|
|
33
|
+
|
|
34
|
+
## Coexistence with devPNT (the Hybrid seam)
|
|
35
|
+
|
|
36
|
+
This section is the single authoritative answer to "who owns what" when both the
|
|
37
|
+
skill and devPNT are active. The skill owns the **process** (triage, phases, Vision
|
|
38
|
+
Gate, lifecycle); devPNT owns the **machinery** (governed storage, versioned
|
|
39
|
+
proposals, semantic analysis, independent reviewers). devPNT strengthens the
|
|
40
|
+
process; it never replaces it.
|
|
41
|
+
|
|
42
|
+
### Ownership matrix
|
|
43
|
+
|
|
44
|
+
| Artifact | Standalone master | Hybrid master | Mirror rule |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| Product vision | `vision/project_vision.md` | `vision/project_vision.md` (product scope) | devPNT KL vision is regenerated from it, never edited independently |
|
|
47
|
+
| Milestone vision | `vision/roadmap.md` milestones | devPNT M-VISION | `roadmap.md` may reference the M-VISION key; it never restates its content |
|
|
48
|
+
| Feature design | `solutions/ANALYSIS_[feature].md` | devPNT E-ISP/E-TDD (+ D-UC/P-TM) | shadow exported from the ACCEPTED DB version as `SHADOW_[doc_key]_vX.Y.md`; on divergence the DB wins and the shadow is regenerated |
|
|
49
|
+
| Plans | `## Action Plan` inside the ANALYSIS | devPNT Master/Action Plan | none |
|
|
50
|
+
| Feature state | ANALYSIS frontmatter `status` | Action Plan node status | mapping table below; at closure both must move together |
|
|
51
|
+
| ADR | `architecture/` (canonical dir) | devPNT DB (`adr_YYYY-MM-DD_slug`) | optional filesystem shadow `SHADOW_adr_*` exported at closure for grep-ability |
|
|
52
|
+
| Audit / freshness | `audit/audit_plan.md` + `stale`/`mark` | devPNT KL coverage + summary status | run `check --hybrid` (skips audit-plan staleness) |
|
|
53
|
+
| Design review (pre-implementation) | `review.md` moment 1, on the ANALYSIS | devPNT §4.5 gate on `E-ISP`/`E-TDD` | same slot, richer backend — run ONE of them, never both |
|
|
54
|
+
| *(mode is per unit of change, not per project)* | a Hybrid-capable project may work one feature Standalone: the slot follows the ARTIFACT the design lives in, and the mode is declared in that artifact. `validate --hybrid` suppresses the Standalone design-review backstop, since devPNT owns the slot there | | |
|
|
55
|
+
| Review log | `audit/reviews/REVIEW_LOG.md` | devPNT `REVIEW_LOG.md` (same path) | always filesystem |
|
|
56
|
+
| Operative guides | `ai_docs/reference/` | `ai_docs/reference/` — **filesystem-first even in Hybrid** | devPNT bootstrap may point at their index; it never copies their content |
|
|
57
|
+
| Handoff | `audit/handoff.md` | `audit/handoff.md` | always filesystem |
|
|
58
|
+
|
|
59
|
+
### Triage equivalence (one threshold, two vocabularies)
|
|
60
|
+
|
|
61
|
+
devPNT's "significance threshold" and the skill's triage are the SAME test. Do not
|
|
62
|
+
run two classifications:
|
|
63
|
+
|
|
64
|
+
| Skill triage | devPNT equivalent | Governed artifacts |
|
|
65
|
+
|---|---|---|
|
|
66
|
+
| L1 Trivial | trivial exempt | none |
|
|
67
|
+
| L2 Small | localized obvious edit | none — but see escalation |
|
|
68
|
+
| L3 Significant | governed unit of change | D-UC/P-TM/E-ISP/E-TDD per the devPNT trigger policy |
|
|
69
|
+
| Spike | exempt (non-mergeable) | `SPIKE_[topic].md` only |
|
|
70
|
+
|
|
71
|
+
Escalation triggers (any one of these makes it L3, in BOTH vocabularies): touches
|
|
72
|
+
more than one module, changes a public API/contract/message format, changes a data
|
|
73
|
+
model or state machine, has a security surface, risks duplicating existing logic,
|
|
74
|
+
or the design choice is non-obvious. An L2 that trips one of these is not an L2.
|
|
75
|
+
|
|
76
|
+
### Feature state mapping
|
|
77
|
+
|
|
78
|
+
| ANALYSIS frontmatter | devPNT plan node |
|
|
79
|
+
|---|---|
|
|
80
|
+
| PLANNED | READY (or BLOCKED / ON_HOLD while waiting) |
|
|
81
|
+
| IN_PROGRESS | PROGRESS |
|
|
82
|
+
| COMPLETED | DONE |
|
|
83
|
+
| CANCELLED | CANCELLED |
|
|
84
|
+
|
|
85
|
+
Closure discipline: never mark the node DONE while the shadow/ANALYSIS still says
|
|
86
|
+
IN_PROGRESS, or vice versa. They move in the same closure step.
|
|
87
|
+
|
|
88
|
+
### Shadow discipline (Hybrid)
|
|
89
|
+
|
|
90
|
+
- Shadow filename: `SHADOW_[doc_key]_vX.Y.md`, first line
|
|
91
|
+
`<!-- SHADOW generated from devPNT (doc_key vX.Y) - do not edit by hand -->`.
|
|
92
|
+
Never save a shadow under an `ANALYSIS_*` name: that name means "authoritative
|
|
93
|
+
Standalone document" and the validator treats it as such.
|
|
94
|
+
- **Export the approved E-TDD shadow BEFORE implementation** (not only at closure).
|
|
95
|
+
It gives context-free subagents their design input, unlocks `gate --hybrid`, and
|
|
96
|
+
guarantees the filesystem fallback if devPNT becomes unavailable mid-feature.
|
|
97
|
+
- At closure, refresh all shadows from the accepted DB versions.
|
|
98
|
+
|
|
99
|
+
### Validator in Hybrid
|
|
100
|
+
|
|
101
|
+
Pass `--hybrid` explicitly (never auto-detected — an explicit flag beats a guessed
|
|
102
|
+
mode): `check --hybrid` and `stale --hybrid` skip audit-plan staleness (mapping is
|
|
103
|
+
delegated to devPNT/KL) — guide-drift checking still runs (`ai_docs/reference/`
|
|
104
|
+
is filesystem-first even in Hybrid, see the ownership matrix above); `gate --hybrid`
|
|
105
|
+
also unlocks on the presence of an E-TDD shadow in `solutions/` (the Hybrid design
|
|
106
|
+
gate) instead of requiring an IN_PROGRESS ANALYSIS.
|
|
@@ -82,15 +82,92 @@ its outcome. The trigger term "permission-gated" scopes the STOP; the row word
|
|
|
82
82
|
|
|
83
83
|
Use a different model from the author's where the client allows it.
|
|
84
84
|
|
|
85
|
+
**The capability floor — which tier may run this role.** Independence says the
|
|
86
|
+
reviewer must not be the author; it says nothing about whether the reviewer *can
|
|
87
|
+
do the job*. A gate run below the capability its judgement needs produces the
|
|
88
|
+
myopia the gate exists to catch, **while reporting as an independent review** —
|
|
89
|
+
worse than no gate, because it certifies. So each role carries a minimum tier.
|
|
90
|
+
Tiers are **client-relative capability levels, never provider names** (a name
|
|
91
|
+
rots at the next model release; the tier→model binding lives in the client's own
|
|
92
|
+
agent definition, never in this file):
|
|
93
|
+
|
|
94
|
+
| Role | Floor | Why there |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| **authoring a governed artifact** (Vision, the analysis/design, use cases, the Interface Contract, threat model — `dispatch.md`'s never-list owns the enumeration) | **deep** | the purest case of the rule below: the output is judgement, nothing scores it, and `dispatch.md`'s never-list forbids moving it elsewhere — so the session's own capability IS this work's capability |
|
|
97
|
+
| design review, closure review, any verdict on judgement | **deep** | the output is a judgement whose wrongness no check can see |
|
|
98
|
+
| a light conformance or consistency pass (schema, coverage, citation resolution) | **light** | the criterion is stated and mechanical |
|
|
99
|
+
| implementer dispatch, probe execution, anchor resolution, index regeneration | **economy** | a threshold signal catches a wrong cheap answer |
|
|
100
|
+
|
|
101
|
+
The rule underneath the table: **a tier may be lowered only where a threshold
|
|
102
|
+
signal exists** — `task.verify`, a test, a diff against a spec, an assertion
|
|
103
|
+
harness — because that is what makes a wrong cheap answer visible instead of
|
|
104
|
+
plausible. Where the output is judgement and nothing scores it, there is no
|
|
105
|
+
signal to lower against, and the floor is the whole policy.
|
|
106
|
+
|
|
107
|
+
**A session's floor is the highest floor among the roles it performs itself.** The
|
|
108
|
+
table above binds reviewers and dispatched subagents, chosen per call — but the
|
|
109
|
+
session doing the authoring was chosen by the USER before the agent existed, and
|
|
110
|
+
an agent cannot re-tier itself mid-session. So the rule that reaches it is not
|
|
111
|
+
routing, it is **disclosure**: where a session can determine that it is below the
|
|
112
|
+
floor for a role it performs itself, it says so **once per session, at the first
|
|
113
|
+
such role** — not once per unit — and the disclosure is repeated in the review
|
|
114
|
+
row's existing `reviewer` cell (Hybrid: `notes`), which is what makes the pair
|
|
115
|
+
below visible without adding a column.
|
|
116
|
+
|
|
117
|
+
**Say plainly how thin this reach is.** A session knows its model NAME; tiers here
|
|
118
|
+
are deliberately client-relative and this file maps no name to a tier, so the
|
|
119
|
+
antecedent is satisfiable only where a session can recognize its own tier — which
|
|
120
|
+
is also the session least likely to run the check. Where a session **cannot
|
|
121
|
+
determine its own tier**, it owes nothing: the rule binds what an agent can know
|
|
122
|
+
and say, never a capability it cannot acquire. **The reliably working half of this
|
|
123
|
+
rule is the one addressed to the user, not to the agent** — which is why the
|
|
124
|
+
package READMEs carry the tier-selection guidance, and why that is not a footnote.
|
|
125
|
+
|
|
126
|
+
**Never both below the floor on the same unit — except when nothing better
|
|
127
|
+
exists.** Where the authoring session ran below floor, the independent review's
|
|
128
|
+
floor becomes non-negotiable and the same unit should not ALSO run a below-floor
|
|
129
|
+
review. **The exception is the case *When independence and capability conflict*
|
|
130
|
+
governs below**: where no independent rung at or above the floor exists at all,
|
|
131
|
+
that rule wins, the review still runs, BOTH disclosures are recorded, and the
|
|
132
|
+
result is not a violation but the worst admissible state — honestly labelled.
|
|
133
|
+
Forbidding it outright would push the agent toward the abstention that rule
|
|
134
|
+
explicitly rejects.
|
|
135
|
+
|
|
136
|
+
**When independence and capability conflict, independence wins.** A client whose
|
|
137
|
+
only independent rung is bound below the floor (a single-model client, or a
|
|
138
|
+
subagent facility whose agent definition fixes a cheap model) still runs the
|
|
139
|
+
gate: a below-floor *independent* reviewer catches the class the author is
|
|
140
|
+
structurally blind to, while a self-pass catches none of it. What the floor then
|
|
141
|
+
requires is **disclosure, not abstention** — the row records the tier that
|
|
142
|
+
actually ran (`below floor: <reason>`), and that record IS the remedy. Where a
|
|
143
|
+
higher-capability path exists but is permission-gated, nothing new applies: *The
|
|
144
|
+
gated rung* above already governs, one question per gate per intact context.
|
|
145
|
+
Where the client exposes no capability choice at all, the row says
|
|
146
|
+
`single (client exposes no choice)` and the floor is satisfied by construction —
|
|
147
|
+
it is a routing rule, and a routing rule with one route is not a failure.
|
|
148
|
+
|
|
85
149
|
**Rounds are capped at 3.** FAIL → revise → re-review. If findings still stand
|
|
86
150
|
after the third, stop and surface them to the user with the artifact — a gate that
|
|
87
151
|
can block forever gets removed. **Log one row per completed review, PASS or FAIL**
|
|
88
152
|
— a FAIL surfaced to the user is the highest-value outcome the gate produces, and
|
|
89
153
|
logging only passes would erase exactly that evidence. The row goes in
|
|
90
154
|
`ai_docs/audit/reviews/REVIEW_LOG.md` (create it if absent — `templates.md`):
|
|
91
|
-
`| date | doc_key | tier | reviewer | findings_raised | findings_real | verdict | revise_rounds |`,
|
|
92
|
-
with `tier` = `design` or `closure` in Standalone.
|
|
93
|
-
|
|
155
|
+
`| date | doc_key | tier | model | reviewer | findings_raised | findings_real | verdict | revise_rounds |`,
|
|
156
|
+
with `tier` = `design` or `closure` in Standalone. **`model` records the capability
|
|
157
|
+
tier that actually ran** — `deep`, `light`, `economy`, `single (client exposes no
|
|
158
|
+
choice)`, or `below floor: <reason>` — never a provider name in doctrine (a project
|
|
159
|
+
may of course write its own model names in its own log). Without it the floor above
|
|
160
|
+
is a belief: the row would say a gate ran and never whether it could do its job, and
|
|
161
|
+
the correlation with `revise_rounds` and `findings_real` — the only evidence the
|
|
162
|
+
policy pays — could not be drawn.
|
|
163
|
+
|
|
164
|
+
**One schema for both modes**, meaning one required CORE plus each mode's own
|
|
165
|
+
**mode-specific** realization columns. The core is what both modes actually share: `date`, `doc_key`,
|
|
166
|
+
`tier`, `model`, `findings_raised`, `findings_real`, `verdict`, `revise_rounds`.
|
|
167
|
+
Around it, Standalone adds `reviewer` and Hybrid adds `instrument` and `notes` —
|
|
168
|
+
a devPNT row carries no `reviewer` column at all, so "one identical column list"
|
|
169
|
+
was never true of the two modes. This costs nothing for the reason `templates.md`
|
|
170
|
+
§`ai_docs/audit/reviews/REVIEW_LOG.md` owns and states.
|
|
94
171
|
The log is how the gate's value is measured over time; skipping it makes the gate
|
|
95
172
|
unfalsifiable, the same defect as an unnamed EXISTS or a faked router verdict.
|
|
96
173
|
|
|
@@ -13,7 +13,7 @@ image, copy BOTH (`ENFORCEMENT.md` §2 has the recipe); copying this one alone
|
|
|
13
13
|
fails at import, loudly and immediately, which is the intended failure.
|
|
14
14
|
|
|
15
15
|
Usage is `sdlc_core.py`'s: check / validate / index / stale / mark / gate /
|
|
16
|
-
orient / plan.
|
|
16
|
+
orient / benefit / plan.
|
|
17
17
|
"""
|
|
18
18
|
import sys
|
|
19
19
|
from pathlib import Path
|
|
@@ -50,7 +50,7 @@ sdlc_core.set_profile(
|
|
|
50
50
|
unit_noun="feature",
|
|
51
51
|
support_files=("templates.md", "architect.md", "guides.md", "vision.md", "tdd.md",
|
|
52
52
|
"debugging.md", "elicitation.md", "review.md", "dispatch.md",
|
|
53
|
-
"routing.md", "ENFORCEMENT.md"),
|
|
53
|
+
"routing.md", "hybrid.md", "ENFORCEMENT.md"),
|
|
54
54
|
capabilities=(
|
|
55
55
|
# spine
|
|
56
56
|
"triage", "write_triggers", "workstream_registry", "vision_gate",
|
|
@@ -60,6 +60,15 @@ sdlc_core.set_profile(
|
|
|
60
60
|
"subagent_dispatch", "legacy_narrative_handoff", "question_discipline",
|
|
61
61
|
),
|
|
62
62
|
design_gate_between=("### 3. Request Analysis", "### 4. Development and Testing"),
|
|
63
|
+
remind_line=(
|
|
64
|
+
"first decide if this skill governs the work; if yes, LOAD it once -- an "
|
|
65
|
+
"unread protocol cannot be applied. Declare the level (L1/L2/L3/Spike) "
|
|
66
|
+
"and the guide-router verdict before acting; an imperative is a request "
|
|
67
|
+
"to triage. Name the mechanism before fixing the first defect you can "
|
|
68
|
+
"measure -- symptom patches recur and stack. Replay governing text -- "
|
|
69
|
+
"doctrine, a prompt, a schema -- against the case that motivated it: red "
|
|
70
|
+
"under the old text, green under the new."
|
|
71
|
+
),
|
|
63
72
|
)
|
|
64
73
|
|
|
65
74
|
|