@alexandrealvaro/agentic 0.14.0-beta.1 → 0.15.1-beta.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/README.md +74 -60
- package/WORKFLOW.md +6 -6
- package/package.json +2 -2
- package/src/commands/init.js +44 -33
- package/src/commands/update.js +1 -1
- package/src/lib/profiles.js +86 -56
- package/src/lib/rootdoc.js +47 -30
- package/src/skills/claude-code/{agentic-adr → ad-adr}/SKILL.md +5 -4
- package/src/skills/claude-code/{agentic-architecture → ad-architecture}/SKILL.md +7 -6
- package/src/skills/claude-code/{agentic-audit → ad-audit}/SKILL.md +5 -4
- package/src/skills/claude-code/{agentic-bootstrap → ad-bootstrap}/SKILL.md +8 -7
- package/src/skills/claude-code/ad-commit/SKILL.md +167 -0
- package/src/skills/claude-code/ad-deepen/SKILL.md +124 -0
- package/src/skills/claude-code/{agentic-design → ad-design}/SKILL.md +6 -5
- package/src/skills/claude-code/ad-diagnose/SKILL.md +158 -0
- package/src/skills/claude-code/ad-domain/SKILL.md +148 -0
- package/src/skills/claude-code/ad-grill/SKILL.md +119 -0
- package/src/skills/claude-code/{agentic-ground → ad-ground}/SKILL.md +8 -7
- package/src/skills/claude-code/{agentic-hooks → ad-hooks}/SKILL.md +5 -4
- package/src/skills/claude-code/ad-merge/SKILL.md +118 -0
- package/src/skills/claude-code/{agentic-next → ad-next}/SKILL.md +15 -14
- package/src/skills/claude-code/{agentic-philosophy → ad-philosophy}/SKILL.md +7 -6
- package/src/skills/claude-code/ad-pr/SKILL.md +135 -0
- package/src/skills/claude-code/{agentic-review → ad-review}/SKILL.md +6 -5
- package/src/skills/claude-code/{agentic-skill → ad-skill}/SKILL.md +3 -2
- package/src/skills/claude-code/{agentic-spec → ad-spec}/SKILL.md +6 -5
- package/src/skills/claude-code/{agentic-spike → ad-spike}/SKILL.md +12 -11
- package/src/skills/claude-code/{agentic-subagent → ad-subagent}/SKILL.md +3 -2
- package/src/skills/claude-code/{agentic-task → ad-task}/SKILL.md +4 -3
- package/src/skills/claude-code/{agentic-tdg → ad-tdg}/SKILL.md +12 -11
- package/src/skills/codex/{agentic-adr → ad-adr}/SKILL.md +4 -3
- package/src/skills/codex/{agentic-adr → ad-adr}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-architecture → ad-architecture}/SKILL.md +6 -5
- package/src/skills/codex/{agentic-architecture → ad-architecture}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-audit → ad-audit}/SKILL.md +4 -3
- package/src/skills/codex/{agentic-audit → ad-audit}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-bootstrap → ad-bootstrap}/SKILL.md +7 -6
- package/src/skills/codex/{agentic-bootstrap → ad-bootstrap}/agents/openai.yaml +1 -1
- package/src/skills/codex/ad-commit/SKILL.md +122 -0
- package/src/skills/codex/ad-commit/agents/openai.yaml +5 -0
- package/src/skills/codex/ad-deepen/SKILL.md +112 -0
- package/src/skills/codex/ad-deepen/agents/openai.yaml +5 -0
- package/src/skills/codex/{agentic-design → ad-design}/SKILL.md +5 -4
- package/src/skills/codex/{agentic-design → ad-design}/agents/openai.yaml +1 -1
- package/src/skills/codex/ad-diagnose/SKILL.md +132 -0
- package/src/skills/codex/ad-diagnose/agents/openai.yaml +5 -0
- package/src/skills/codex/ad-domain/SKILL.md +135 -0
- package/src/skills/codex/ad-domain/agents/openai.yaml +5 -0
- package/src/skills/codex/ad-grill/SKILL.md +106 -0
- package/src/skills/codex/ad-grill/agents/openai.yaml +5 -0
- package/src/skills/codex/{agentic-ground → ad-ground}/SKILL.md +5 -4
- package/src/skills/codex/{agentic-ground → ad-ground}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-hooks → ad-hooks}/SKILL.md +4 -3
- package/src/skills/codex/{agentic-hooks → ad-hooks}/agents/openai.yaml +1 -1
- package/src/skills/codex/ad-merge/SKILL.md +102 -0
- package/src/skills/codex/ad-merge/agents/openai.yaml +5 -0
- package/src/skills/codex/{agentic-next → ad-next}/SKILL.md +9 -8
- package/src/skills/codex/{agentic-next → ad-next}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-philosophy → ad-philosophy}/SKILL.md +6 -5
- package/src/skills/codex/{agentic-philosophy → ad-philosophy}/agents/openai.yaml +1 -1
- package/src/skills/codex/ad-pr/SKILL.md +115 -0
- package/src/skills/codex/ad-pr/agents/openai.yaml +5 -0
- package/src/skills/codex/{agentic-review → ad-review}/SKILL.md +5 -4
- package/src/skills/codex/{agentic-review → ad-review}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-skill → ad-skill}/SKILL.md +2 -1
- package/src/skills/codex/{agentic-skill → ad-skill}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-spec → ad-spec}/SKILL.md +5 -4
- package/src/skills/codex/{agentic-spec → ad-spec}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-spike → ad-spike}/SKILL.md +10 -9
- package/src/skills/codex/{agentic-spike → ad-spike}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-task → ad-task}/SKILL.md +3 -2
- package/src/skills/codex/{agentic-task → ad-task}/agents/openai.yaml +1 -1
- package/src/skills/codex/{agentic-tdg → ad-tdg}/SKILL.md +12 -11
- package/src/skills/codex/{agentic-tdg → ad-tdg}/agents/openai.yaml +2 -2
- /package/src/skills/claude-code/{agentic-review → ad-review}/agents/fresh-context-reviewer.md +0 -0
- /package/src/skills/claude-code/{agentic-review → ad-review}/manifest.json +0 -0
package/README.md
CHANGED
|
@@ -4,13 +4,13 @@ A starter kit for engineering production code with LLMs. Lean templates and init
|
|
|
4
4
|
|
|
5
5
|
**The framing.** An LLM is the super-soldier serum; the engineer is Steve Rogers. The serum amplifies what the engineer already brings — solid bases, investigation, care for quality, architecture, clean code, observability, maintainability. The kit encodes those bases as skills, ADRs, and gates so the amplification compounds in the right direction. See [WORKFLOW.md](WORKFLOW.md) for the principles.
|
|
6
6
|
|
|
7
|
-
The CLI installs
|
|
7
|
+
The CLI installs nineteen universal skills at the default `team` profile (`ad-bootstrap`, `ad-philosophy`, `ad-architecture`, `ad-adr`, `ad-spec`, `ad-task`, `ad-audit`, `ad-review`, `ad-ground`, `ad-next`, `ad-spike`, `ad-tdg`, `ad-domain`, `ad-grill`, `ad-deepen`, `ad-diagnose`, `ad-commit`, `ad-pr`, `ad-merge`) plus four conditional ones (`ad-design` for frontend, `ad-subagent` for Claude Code, `ad-skill` opt-in, `ad-hooks` opt-in / recommended at `mature`) into the agent's native location. Lower profiles install fewer (`poc` = 9 universals, `solo` = 16, `team` / `mature` = 19; `ad-deepen` is excluded from `poc` / `solo` per [ADR-0020](doc/adr/0020-deep-modules-vocabulary.md) §4; `ad-commit` / `ad-pr` / `ad-merge` are excluded from `poc` per [ADR-0023](doc/adr/0023-agentic-commit-skill.md) / [ADR-0024](doc/adr/0024-agentic-pr-skill.md) / [ADR-0025](doc/adr/0025-agentic-merge-skill.md)). Each skill produces its artifact or runs its operation via the agent's native conversational UI; `agentic update` keeps installed skills in sync with upstream kit changes via a state-aware three-way diff. Report rough edges via [GitHub Issues](https://github.com/alexandremendoncaalvaro/agentic-development/issues); current releases live under [GitHub Releases](https://github.com/alexandremendoncaalvaro/agentic-development/releases).
|
|
8
8
|
|
|
9
9
|
## Prerequisites
|
|
10
10
|
|
|
11
11
|
An agentic coding tool that reads markdown files. Examples here use **Claude Code** and **Codex CLI** (primary tools the author uses); the kit also works with [Antigravity](https://antigravity.google), [Gemini CLI](https://github.com/google-gemini/gemini-cli), Cursor, Continue, Aider, and any other tool that follows the [agents.md](https://agents.md) open standard.
|
|
12
12
|
|
|
13
|
-
For the CLI path: Node.js 18
|
|
13
|
+
For the CLI path: Node.js 20+ (Node 18 is past EOL and `@clack/prompts` 1.x requires `node:util` `styleText`, which only ships in Node 20+). The CLI is the recommended path. Paste-into-agent prompts (see [Manual prompts](#manual-prompts) below) remain as an alternative for users who don't want to run an installer — same artifacts, same patterns.
|
|
14
14
|
|
|
15
15
|
For the philosophy and full reasoning behind the kit, see [WORKFLOW.md](WORKFLOW.md).
|
|
16
16
|
|
|
@@ -30,37 +30,44 @@ Two categories ([ADR-0007](doc/adr/0007-workflow-operational-skills.md)) and two
|
|
|
30
30
|
|
|
31
31
|
| Skill | Category | Installs | What it does | Invoke |
|
|
32
32
|
| --- | --- | --- | --- | --- |
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
35
|
-
| `
|
|
36
|
-
| `
|
|
37
|
-
| `
|
|
38
|
-
| `
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
|
|
50
|
-
|
|
33
|
+
| `ad-bootstrap` | spec-driven | universal | Scans the repo, writes `AGENTS.md` ≤150 lines | `/ad-bootstrap` |
|
|
34
|
+
| `ad-architecture` | spec-driven | universal | Scans the code, writes `ARCHITECTURE.md` | `/ad-architecture` |
|
|
35
|
+
| `ad-adr` | spec-driven | universal | Drafts `doc/adr/NNNN-<slug>.md` from the conversation | `/ad-adr` |
|
|
36
|
+
| `ad-spec` | spec-driven | universal | Drafts `doc/specs/NNNN-<slug>.md` — feature-level spec (User Scenarios, Requirements, Success Criteria) layer 3 of the five-layer stack | `/ad-spec` |
|
|
37
|
+
| `ad-task` | spec-driven | universal | Drafts `doc/tasks/NNNN-<slug>.md` (checkbox + Notes format; carries `Spec ref` to link the implementing spec) | `/ad-task` |
|
|
38
|
+
| `ad-audit` | spec-driven | universal | Read-only drift report (AGENTS.md / ARCHITECTURE.md / ADRs) | `/ad-audit` |
|
|
39
|
+
| `ad-philosophy` | workflow-operational | universal | Universal agent guardrails — auto-loads on non-trivial work | implicit |
|
|
40
|
+
| `ad-review` | workflow-operational | universal | Fresh-context code review per WORKFLOW §10; structured findings, no "approve" | `/ad-review <range>` |
|
|
41
|
+
| `ad-ground` | workflow-operational | universal | Four-source pre-implementation research (docs / OSS / in-repo / git history) + happy-path synthesis + deviation gate per WORKFLOW §4 + §5 | `/ad-ground` |
|
|
42
|
+
| `ad-next` | workflow-operational | universal | State-aware navigation aid (`flutter doctor` pattern) — surveys the five-layer artifact stack and recommends prioritized next actions; complements `ad-audit` (drift) | `/ad-next` |
|
|
43
|
+
| `ad-spike` | workflow-operational | universal | Staged spike with golden fixtures per WORKFLOW §14, for cases where the *technique* is uncertain across multiple plausible approaches; produces `spikes/NNNN-<slug>/` with discovery + fixture + pipeline-with-gates + two-layer evaluation | `/ad-spike` |
|
|
44
|
+
| `ad-tdg` | workflow-operational | universal | Outcome-based prompting per WORKFLOW §9 — ground truth pair + Test Dependency Map + three approaches + single-criterion selection, for cases where the technique is known but the implementation strategy is uncertain | `/ad-tdg` |
|
|
45
|
+
| `ad-domain` | spec-driven | universal | Lazy lifecycle owner of `CONTEXT.md` (Layer 2 — ubiquitous language per Evans 2003); single-context or `CONTEXT-MAP.md` multi-context | `/ad-domain` |
|
|
46
|
+
| `ad-grill` | workflow-operational | universal | Interview-before-research grilling — one question at a time with recommendation, codebase-first, sharpens vocabulary against `CONTEXT.md`, captures terms via `ad-domain` and decisions via `ad-adr` (three-criteria rule); upstream of `ad-ground` | `/ad-grill` |
|
|
47
|
+
| `ad-deepen` | workflow-operational | universal in `team` + `mature` only | Surface deepening opportunities using WORKFLOW §8 vocabulary (Module / Interface / Depth / Seam / Adapter / Leverage / Locality); three phases — explore, present numbered candidates with deletion-test framing, grill the chosen one; pairs with `ad-audit` | `/ad-deepen` |
|
|
48
|
+
| `ad-diagnose` | workflow-operational | universal | Disciplined diagnosis loop for hard bugs and performance regressions per WORKFLOW §15; five phases — build a feedback loop (the skill itself), reproduce, hypothesise (3-5 ranked falsifiable), instrument (one variable at a time), fix + regression-test | `/ad-diagnose` |
|
|
49
|
+
| `ad-commit` | workflow-operational | universal in `solo` / `team` / `mature` | Atomic Conventional Commits with DCO `Signed-off-by` sign-off per ADR-0023; four phases — scope intake, stage-split when concerns mix, draft message, sign + write. Identity from `git config`. No `Co-Authored-By`. Helper, not blocker | `/ad-commit` |
|
|
50
|
+
| `ad-pr` | workflow-operational | universal in `solo` / `team` / `mature` | Open a GitHub PR with a uniform body shape (Summary / Test plan / Links) per ADR-0024; four phases — preflight (`gh` auth + branch pushed), scope assembly, draft body, open + report URL. Title format = Conventional Commits | `/ad-pr` |
|
|
51
|
+
| `ad-merge` | workflow-operational | universal in `solo` / `team` / `mature` | Evaluate (CI / fresh-context review / linked task / unresolved comments / mergeability) and merge a GitHub PR per ADR-0025; CI green = hard gate (yields to explicit user override); others = warnings. Merge mode auto-detected from `gh repo view`; `--delete-branch` by default | `/ad-merge` |
|
|
52
|
+
| `ad-design` | spec-driven | auto if frontend detected | Bootstrap `DESIGN.md` from existing tokens (Figma, tailwind.config, tokens.json, CSS custom props) | `/ad-design` |
|
|
53
|
+
| `ad-subagent` | spec-driven | auto if installing for Claude Code | Drafts `.claude/agents/<name>.md` (Claude Code only — Codex has no subagent primitive) | `/ad-subagent` |
|
|
54
|
+
| `ad-skill` | spec-driven | opt-in only | Drafts a new Claude Code or Codex skill at the appropriate path | `/ad-skill` |
|
|
55
|
+
| `ad-hooks` | workflow-operational | opt-in only | Scaffolds deterministic quality gates per WORKFLOW §11 (pre-commit + pre-push); detects stack and recommends a runner (Husky / lefthook / pre-commit / native) | `/ad-hooks` |
|
|
56
|
+
|
|
57
|
+
A short TUI shows the detected mode, agent, and feature signals (frontend / `.claude/` / `.agents/` presence) and lets you toggle the conditional skills. Non-interactive flags: `--agent claude-code | codex | both`, `--yes` to skip confirmations — auto-checked conditionals (e.g., `ad-design` if the project has React) install; `ad-skill` stays opt-in. Re-running on an installed project is idempotent — unchanged files report `·`, divergent ones prompt to replace.
|
|
51
58
|
|
|
52
59
|
If your project already has an `AGENTS.md` (or `CLAUDE.md`), the installer appends a managed `Skills installed by agentic` section bracketed by `<!-- agentic-managed-skills:start -->` / `:end -->` markers. User content outside those markers is byte-preserved; re-runs update only the managed block.
|
|
53
60
|
|
|
54
|
-
###
|
|
61
|
+
### v0.15 bundle
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
The four skills accepted by ADR-0019 / 0020 / 0021 / 0022 (the mattpocock-absorption Phase-2 set) shipped together in v0.15.0-beta.1. Closes [task-0020](doc/tasks/0020-mattpocock-absorptions.md) Phase 2 in a single release rather than the originally-planned per-minor stack (v0.15 → v0.18). Rationale: 3 of 4 skills are direct mirrors of mature mattpocock prior art; bundling kept the WORKFLOW §15 / §8 / Layer-2 deltas coherent in one ship.
|
|
57
64
|
|
|
58
|
-
| Skill |
|
|
59
|
-
| --- | --- | --- |
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
65
|
+
| Skill | ADR | Operationalizes |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `ad-domain` | [ADR-0019](doc/adr/0019-domain-language-layer.md) | Layer 2 (ubiquitous language) — lazy `CONTEXT.md` lifecycle |
|
|
68
|
+
| `ad-grill` | [ADR-0022](doc/adr/0022-agentic-grill-skill.md) | Interview-before-research, upstream of `ad-ground` |
|
|
69
|
+
| `ad-deepen` | [ADR-0020](doc/adr/0020-deep-modules-vocabulary.md) | WORKFLOW §8 vocabulary applied to refactor proposals (team + mature only) |
|
|
70
|
+
| `ad-diagnose` | [ADR-0021](doc/adr/0021-diagnose-discipline.md) | WORKFLOW §15 five-phase debugging |
|
|
64
71
|
|
|
65
72
|
## Project maturity profiles
|
|
66
73
|
|
|
@@ -68,10 +75,10 @@ The kit ships four profiles that select which skills auto-install. Same WORKFLOW
|
|
|
68
75
|
|
|
69
76
|
| Profile | Universal install set | Conditional posture | Recommended for |
|
|
70
77
|
| --- | --- | --- | --- |
|
|
71
|
-
| `poc` | philosophy, ground, audit | all blocked | spike, hackathon, exploration |
|
|
72
|
-
| `solo` | + bootstrap, spec, task, review | architecture / adr / hooks opt-in; design auto if frontend; subagent auto for Claude Code | solo developer shipping a real product |
|
|
73
|
-
| `team` (default) | + architecture, adr | hooks opt-in; design / subagent / skill follow autoIf | team product, shared discipline |
|
|
74
|
-
| `mature` | same as team | hooks **recommended**;
|
|
78
|
+
| `poc` | 9 — philosophy, ground, audit, next, spike, tdg, domain, grill, diagnose | all blocked | spike, hackathon, exploration |
|
|
79
|
+
| `solo` | 16 — + bootstrap, spec, task, review, commit, pr, merge | architecture / adr / hooks opt-in; design auto if frontend; subagent auto for Claude Code | solo developer shipping a real product |
|
|
80
|
+
| `team` (default) | 19 — + architecture, adr, deepen | hooks opt-in; design / subagent / skill follow autoIf | team product, shared discipline |
|
|
81
|
+
| `mature` | 19 — same as team | hooks **recommended**; deepening surfaced via `ad-deepen` | regulated / public-facing production |
|
|
75
82
|
|
|
76
83
|
Select at init time:
|
|
77
84
|
|
|
@@ -125,7 +132,7 @@ Useful flags:
|
|
|
125
132
|
|
|
126
133
|
If the project was installed with a kit version older than v0.3 (no state file present), the first `update` falls back to today's byte-compare behavior, then writes the state file so subsequent runs use the three-way diff.
|
|
127
134
|
|
|
128
|
-
The `
|
|
135
|
+
The `ad-review` skill writes the assembled WORKFLOW §10 handoff to `.agentic/reviews/<ISO-timestamp>-<scope>.md` before delegating to the fresh-context reviewer (Claude Code) or before instructing you to `/clear` and paste (Codex). These files are ephemeral audit artifacts — add `.agentic/reviews/` to your `.gitignore`.
|
|
129
136
|
|
|
130
137
|
For persistent install:
|
|
131
138
|
|
|
@@ -136,41 +143,48 @@ agentic init
|
|
|
136
143
|
|
|
137
144
|
## Recommended daily sequence
|
|
138
145
|
|
|
139
|
-
The kit ships
|
|
146
|
+
The kit ships nineteen universal skills in the full `team` / `mature` install set; `ad-deepen` is excluded from `poc` and `solo` per [ADR-0020](doc/adr/0020-deep-modules-vocabulary.md) §4, and `ad-commit` / `ad-pr` / `ad-merge` are excluded from `poc` per [ADR-0023](doc/adr/0023-agentic-commit-skill.md) / [ADR-0024](doc/adr/0024-agentic-pr-skill.md) / [ADR-0025](doc/adr/0025-agentic-merge-skill.md) (concrete counts: `poc` = 9 universals, `solo` = 16, `team` / `mature` = 19). Plus four conditional skills (`ad-design`, `ad-subagent`, `ad-skill`, `ad-hooks`). The sequence below is a happy path through them for the three flows that cover most daily work. Skip steps that don't apply; the kit never enforces order.
|
|
140
147
|
|
|
141
148
|
**Greenfield project, first non-trivial feature:**
|
|
142
149
|
|
|
143
150
|
1. `agentic init` — install skills.
|
|
144
|
-
2. `/
|
|
145
|
-
3. `/
|
|
146
|
-
4. `/
|
|
147
|
-
5. `/
|
|
148
|
-
6. `/
|
|
149
|
-
7. `/
|
|
150
|
-
8.
|
|
151
|
-
9.
|
|
152
|
-
10. `/
|
|
151
|
+
2. `/ad-bootstrap` — produce `AGENTS.md` (operational guide).
|
|
152
|
+
3. `/ad-architecture` — produce `ARCHITECTURE.md` once load-bearing patterns emerge.
|
|
153
|
+
4. `/ad-grill` — interview-before-research when the ask is fuzzy; resolves vocabulary into `CONTEXT.md` via `/ad-domain` as terms surface.
|
|
154
|
+
5. `/ad-spec` — feature-level spec at `doc/specs/NNNN-<slug>.md` (User Scenarios, Requirements, Success Criteria).
|
|
155
|
+
6. `/ad-adr` — only when the feature forces a binding architectural decision worth recording for posterity (three-criteria rule: hard to reverse, surprising without context, real trade-off).
|
|
156
|
+
7. `/ad-task` — work-unit decomposition; reference the spec via `Spec ref`.
|
|
157
|
+
8. `/ad-ground` — four-source research before code (`ad-philosophy` auto-loads in parallel).
|
|
158
|
+
9. Implement.
|
|
159
|
+
10. `/ad-review main..HEAD` — fresh-context §10 review before merge.
|
|
160
|
+
11. `/ad-audit` — periodic drift check across operational docs, specs, and the `CONTEXT.md` glossary.
|
|
153
161
|
|
|
154
162
|
**Brownfield project, quick fix:**
|
|
155
163
|
|
|
156
164
|
1. `agentic update` (only if you want upstream kit changes).
|
|
157
|
-
2. Fix. `
|
|
158
|
-
3. `/
|
|
165
|
+
2. Fix. `ad-philosophy` auto-loads if the change is non-trivial.
|
|
166
|
+
3. `/ad-review` only if the fix is non-trivial. Trivial diffs skip the review.
|
|
159
167
|
4. Commit.
|
|
160
168
|
|
|
161
169
|
**Brownfield project, research-only ("what's the best way to add X?"):**
|
|
162
170
|
|
|
163
|
-
1. `/
|
|
164
|
-
2. Decide whether the answer becomes a spec (`/
|
|
171
|
+
1. `/ad-ground` — runs the four-source research pass and surfaces the happy path with citations.
|
|
172
|
+
2. Decide whether the answer becomes a spec (`/ad-spec`) or a one-off task (`/ad-task`).
|
|
165
173
|
3. Continue from step 6 of the greenfield flow.
|
|
166
174
|
|
|
167
|
-
The kit's discipline scales with the project's maturity. A solo PoC may legitimately skip `/
|
|
175
|
+
The kit's discipline scales with the project's maturity. A solo PoC may legitimately skip `/ad-spec` and `/ad-adr` (the WORKFLOW §1 prune principle applies — don't add an artifact that wouldn't change agent behavior). A team product running on this kit is expected to use the full sequence and additionally invoke `/ad-hooks` once to scaffold the deterministic gates per WORKFLOW §11 (pre-commit lint / format / secret-scan; pre-push build / unit / integration). Project maturity profiles that automate the recommendation by stack are deferred — see the next planned release.
|
|
176
|
+
|
|
177
|
+
**Lost mid-flow?** Invoke `/ad-next` at any time to survey the project's state across the five-layer artifact stack (Constitution → Domain → Spec → Plan/Decisions → Code) and get prioritized next-action recommendations. Read-only; complements `/ad-audit` (drift detection — different question).
|
|
178
|
+
|
|
179
|
+
**Technique uncertain across multiple plausible approaches?** Invoke `/ad-spike` (per WORKFLOW §14) when the spec is clear but the *how* is unknown — library choice, multi-stage transformation, novel domain. The skill scaffolds a staged spike with golden fixtures + per-stage debug artifacts + two-layer evaluation under `spikes/NNNN-<slug>/`. The directory is throwaway by design; conclude with `/ad-adr` and delete.
|
|
180
|
+
|
|
181
|
+
**Technique known but implementation strategy uncertain?** Invoke `/ad-tdg` (per WORKFLOW §9) when multiple algorithms could produce the expected output with different trade-offs along readability / performance / testability. The skill forces a ground-truth pair, lists the tests covering the file (Test Dependency Map), generates three implementation candidates, and commits to one by a single named criterion — refusing the "optimize for all three at once" failure mode. No file written; the verified implementation is the artifact, with the candidate set + criterion landing in the commit message body.
|
|
168
182
|
|
|
169
|
-
**
|
|
183
|
+
**Question is fuzzy?** Invoke `/ad-grill` (per [ADR-0022](doc/adr/0022-agentic-grill-skill.md)) before research. One question at a time with a recommended answer; codebase-first when the answer is in code; sharpens vocabulary against `CONTEXT.md`. Routes to `/ad-ground` (research-ready), `/ad-tdg` (implement-ready), `/ad-spike` (technique-uncertain), or `/ad-diagnose` (it turned out to be a bug) when the question is sharp.
|
|
170
184
|
|
|
171
|
-
**
|
|
185
|
+
**Bug or performance regression?** Invoke `/ad-diagnose` (per WORKFLOW §15). Five phases — build a feedback loop (the skill itself), reproduce, hypothesise (3-5 ranked falsifiable), instrument (one variable at a time), fix + regression-test. The loop is the skill; everything else is mechanical.
|
|
172
186
|
|
|
173
|
-
**
|
|
187
|
+
**Stable codebase friction?** Invoke `/ad-deepen` (per WORKFLOW §8, [ADR-0020](doc/adr/0020-deep-modules-vocabulary.md)) on `team` / `mature` profiles. Surfaces deepening opportunities using the Module / Interface / Depth / Seam / Adapter / Leverage / Locality vocabulary and the deletion test. Premature on `poc` / `solo` — auto-install excludes them.
|
|
174
188
|
|
|
175
189
|
## Manual prompts
|
|
176
190
|
|
|
@@ -197,19 +211,19 @@ Prompts reference templates by relative path. Two ways to give your agent access
|
|
|
197
211
|
|
|
198
212
|
## Workflows by scenario
|
|
199
213
|
|
|
200
|
-
**New project (greenfield).** Initialize git and project structure, then run `agentic init` to install the universal skill set plus any auto-detected conditional skills. From inside Claude Code or Codex: `/
|
|
214
|
+
**New project (greenfield).** Initialize git and project structure, then run `agentic init` to install the universal skill set plus any auto-detected conditional skills. From inside Claude Code or Codex: `/ad-bootstrap` produces `AGENTS.md`, `/ad-architecture` produces `ARCHITECTURE.md`, `/ad-adr` records each binding decision, `/ad-task` opens trackable work items, `/ad-audit` flags drift, `/ad-review <range>` runs a fresh-context review of a diff, `/ad-design` bootstraps `DESIGN.md` from your tokens (frontend projects), `/ad-subagent` and `/ad-skill` scaffold custom subagents and skills. `ad-philosophy` auto-loads on non-trivial work.
|
|
201
215
|
|
|
202
|
-
**Existing project (brownfield).** Same flow. The project-wide skills (`/
|
|
216
|
+
**Existing project (brownfield).** Same flow. The project-wide skills (`/ad-bootstrap`, `/ad-architecture`) follow a **scan-first pattern**: the agent reads the codebase first, pre-fills every placeholder it can verify, then asks you only about the genuine gaps and conflicts — no philosophical questions, no interview-by-section. The per-artifact skills (`/ad-adr`, `/ad-task`, `/ad-design`, `/ad-skill`, `/ad-subagent`) work on a single decision or asset and don't need codebase-wide verification. Backfill ADRs only for decisions that matter going forward.
|
|
203
217
|
|
|
204
|
-
**Revisiting / auditing existing specs.** Run `/
|
|
218
|
+
**Revisiting / auditing existing specs.** Run `/ad-audit` from inside Claude Code or Codex. The skill reads `AGENTS.md`, `ARCHITECTURE.md`, and `doc/adr/` and produces a drift list — one finding per line, format `[file or section]: spec says X, code says Y. Suggested resolution: change spec / change code / discuss.` Read-only — never rewrites specs. Apply judgment manually before changing anything.
|
|
205
219
|
|
|
206
|
-
**Reviewing your own diff.** Run `/
|
|
220
|
+
**Reviewing your own diff.** Run `/ad-review <range>` (e.g. `/ad-review main..HEAD` or `/ad-review PR#42`). The skill assembles the diff, the relevant spec slice (`AGENTS.md`, applicable ADRs, the task's Acceptance Criteria), and delegates to a fresh-context reviewer subagent — no inherited bias from the session that wrote the code (WORKFLOW §10). Returns structured findings grouped Blocker / Concern / Note. Codex variant uses `/clear` + paste handoff since Codex has no subagent primitive.
|
|
207
221
|
|
|
208
|
-
**Researching before implementation.** Run `/
|
|
222
|
+
**Researching before implementation.** Run `/ad-ground` (or let it auto-trigger on non-trivial work). The skill runs a four-source research pass — official docs, validated open-source examples, in-repo patterns, and git history — synthesizes a happy path with citations from each source, and gates any deviation behind an irrefutable justification before code is written (WORKFLOW §4 + §5). Output is the input to whatever produces the implementation plan; the skill does not write code.
|
|
209
223
|
|
|
210
|
-
**Specifying a feature.** Run `/
|
|
224
|
+
**Specifying a feature.** Run `/ad-spec` (or `/ad-spec` with a feature name). The skill scaffolds `doc/specs/NNNN-<slug>.md` with industry-aligned mandatory sections (User Scenarios, Functional / Non-functional Requirements, Success Criteria, Edge Cases, Out of Scope, Open Questions, Related). Specs are layer 3 of the five-layer artifact stack — Constitution → Domain → Spec → Plan/Decisions → Code. One spec per feature; multiple tasks (`/ad-task`) implement one spec; the task template carries a `Spec ref` field linking back to the spec.
|
|
211
225
|
|
|
212
|
-
**Project already built with agents.** Treat missing artifacts as brownfield (run the relevant skill) and existing artifacts as audit (`/
|
|
226
|
+
**Project already built with agents.** Treat missing artifacts as brownfield (run the relevant skill) and existing artifacts as audit (`/ad-audit`).
|
|
213
227
|
|
|
214
228
|
## What ends up in your target project
|
|
215
229
|
|
|
@@ -230,11 +244,11 @@ your-project/
|
|
|
230
244
|
│ └── reviews/ (gitignored — ephemeral §10 review handoffs)
|
|
231
245
|
├── .claude/ (Claude Code targets)
|
|
232
246
|
│ ├── agentic-state.json (kit install state — committed)
|
|
233
|
-
│ ├── skills/
|
|
247
|
+
│ ├── skills/ad-*/SKILL.md
|
|
234
248
|
│ └── agents/fresh-context-reviewer.md
|
|
235
249
|
└── .agents/ (Codex targets, cc-sdd convention)
|
|
236
250
|
├── agentic-state.json (kit install state — committed)
|
|
237
|
-
└── skills/
|
|
251
|
+
└── skills/ad-*/{SKILL.md, agents/openai.yaml}
|
|
238
252
|
```
|
|
239
253
|
|
|
240
254
|
The pattern matches how [GitHub's spec-kit](https://github.com/github/spec-kit) and [cookiecutter](https://cookiecutter.readthedocs.io/) handle distribution — templates in one place, outputs in another, never mixed.
|
package/WORKFLOW.md
CHANGED
|
@@ -72,7 +72,7 @@ Comments are exceptions. They justify *why* a non-obvious choice was made — ne
|
|
|
72
72
|
|
|
73
73
|
### Documentation Discipline
|
|
74
74
|
|
|
75
|
-
The agent's authoritative copy of the eight-rule documentation discipline lives in the `
|
|
75
|
+
The agent's authoritative copy of the eight-rule documentation discipline lives in the `ad-philosophy` skill (`Documentation Discipline` section). The rules are summarized below for reference; the skill carries the full text agents read at session time. ADR-0008 records the canonical decision and the reconciliations against ADR-0004 (file-based task tracking) and ADR-0005 (universal agent behavior as a skill).
|
|
76
76
|
|
|
77
77
|
1. **Definitions and decisions only.** No speculation, history, or unfounded plans.
|
|
78
78
|
2. **No dates, version stamps, `DRAFT` markers, or changelogs in narrative documents.** Decision-record artifacts under `doc/adr/`, `doc/tasks/`, `doc/specs/` are exempt — their lifecycle fields are the auditability primitive.
|
|
@@ -83,7 +83,7 @@ The agent's authoritative copy of the eight-rule documentation discipline lives
|
|
|
83
83
|
7. **No commented-out code; no orphan `TODO` / `FIXME` in source.** Every deferred item references a GitHub Issue or a `doc/tasks/NNNN-*.md` task.
|
|
84
84
|
8. **Tests are living documentation of behavior.**
|
|
85
85
|
|
|
86
|
-
The skill body explains the rationale per rule, lists the failure modes the rules counter (bloated `AGENTS.md`, README pages drifting into changelogs, decision artifacts diluted by speculation), and walks through the reconciliations. Generator skills (`
|
|
86
|
+
The skill body explains the rationale per rule, lists the failure modes the rules counter (bloated `AGENTS.md`, README pages drifting into changelogs, decision artifacts diluted by speculation), and walks through the reconciliations. Generator skills (`ad-bootstrap`, `ad-architecture`, `ad-spec`, `ad-task`, `ad-adr`, `ad-design`) reject violations of these rules at write time; `ad-audit` flags drift across narrative docs and decision-record artifacts on demand.
|
|
87
87
|
|
|
88
88
|
## 3. Format by Evidence
|
|
89
89
|
|
|
@@ -102,7 +102,7 @@ No format is universally best. **An observation from my practice, not benchmarke
|
|
|
102
102
|
|
|
103
103
|
## 4–5. Research Before Implementation
|
|
104
104
|
|
|
105
|
-
Combines Find the Happy Path (canonical / idiomatic baseline) and Ground in Real Patterns (anchoring in project-specific examples). The kit treats both as one indivisible flow via `
|
|
105
|
+
Combines Find the Happy Path (canonical / idiomatic baseline) and Ground in Real Patterns (anchoring in project-specific examples). The kit treats both as one indivisible flow via `ad-ground`; two prose sections would frame one operation as two separate practices.
|
|
106
106
|
|
|
107
107
|
Two sub-practices, joined into one indivisible pass.
|
|
108
108
|
|
|
@@ -110,7 +110,7 @@ Two sub-practices, joined into one indivisible pass.
|
|
|
110
110
|
|
|
111
111
|
**Ground in real patterns.** Don't dump the codebase into context. Anchor the model in a specific, project-relevant example: *"Find an existing example of [similar feature]; use that exact structure."* Cite specific files, not "the codebase." Use just-in-time retrieval — pass paths or IDs and let the agent fetch via tools.
|
|
112
112
|
|
|
113
|
-
The kit ships `
|
|
113
|
+
The kit ships `ad-ground` as the workflow-operational implementation of both. It runs a four-source research pass — official docs, validated open-source examples, in-repo patterns, git history — joined by AND not OR, synthesizes the happy path with citations from each source, and gates any deviation behind an irrefutable justification before code is written. Splitting the two sub-practices into separate skills would force two invocations with overlapping research outputs and fragment the synthesis context (ADR-0010).
|
|
114
114
|
|
|
115
115
|
## 6. Explore → Plan → Implement → Commit
|
|
116
116
|
|
|
@@ -159,7 +159,7 @@ Three principles fall out of those terms:
|
|
|
159
159
|
- **The interface is the test surface.** Callers and tests cross the same seam. If you want to test *past* the interface, the module is probably the wrong shape.
|
|
160
160
|
- **One adapter is a hypothetical seam; two adapters make it real.** Don't introduce a seam unless something actually varies across it.
|
|
161
161
|
|
|
162
|
-
Skills that touch architecture (`
|
|
162
|
+
Skills that touch architecture (`ad-architecture`, `ad-adr`, the planned `ad-deepen`) use these terms verbatim, so suggestions and reviews land in a single language.
|
|
163
163
|
|
|
164
164
|
## 9. Outcome-Based Prompting (TDG)
|
|
165
165
|
|
|
@@ -230,7 +230,7 @@ This is a combination of established practices, not new terminology: spike (XP),
|
|
|
230
230
|
|
|
231
231
|
## 15. Diagnose With Discipline
|
|
232
232
|
|
|
233
|
-
For hard bugs and performance regressions, the failure mode is jumping to hypotheses before there is a way to check them. The discipline below is the counter; it owes its shape to standard debugging practice (Kernighan & Pike, *The Practice of Programming*, 1999) and the kit ships `
|
|
233
|
+
For hard bugs and performance regressions, the failure mode is jumping to hypotheses before there is a way to check them. The discipline below is the counter; it owes its shape to standard debugging practice (Kernighan & Pike, *The Practice of Programming*, 1999) and the kit ships `ad-diagnose` as the operational implementation (ADR-0021).
|
|
234
234
|
|
|
235
235
|
### Phase 1 — Build a feedback loop
|
|
236
236
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alexandrealvaro/agentic",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1-beta.1",
|
|
4
4
|
"description": "Bootstrap and audit AGENTS.md, ARCHITECTURE.md, ADRs, skills, and subagents for engineering production code with LLMs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"LICENSE"
|
|
17
17
|
],
|
|
18
18
|
"engines": {
|
|
19
|
-
"node": ">=
|
|
19
|
+
"node": ">=20"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"start": "node bin/agentic.js",
|
package/src/commands/init.js
CHANGED
|
@@ -67,28 +67,28 @@ export const REQUIRED_SKILLS = requiredSkillsForProfile('team');
|
|
|
67
67
|
*/
|
|
68
68
|
export const CONDITIONAL_SKILLS = [
|
|
69
69
|
{
|
|
70
|
-
name: '
|
|
70
|
+
name: 'ad-design',
|
|
71
71
|
autoIf: (f) => f.frontend,
|
|
72
72
|
agents: ['claude-code', 'codex'],
|
|
73
73
|
hintWhenAuto: 'detected: frontend',
|
|
74
74
|
hintWhenManual: 'frontend / DESIGN.md',
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
|
-
name: '
|
|
77
|
+
name: 'ad-subagent',
|
|
78
78
|
autoIf: () => true,
|
|
79
79
|
agents: ['claude-code'],
|
|
80
80
|
hintWhenAuto: 'Claude Code only',
|
|
81
81
|
hintWhenManual: 'Claude Code only',
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
|
-
name: '
|
|
84
|
+
name: 'ad-skill',
|
|
85
85
|
autoIf: () => false,
|
|
86
86
|
agents: ['claude-code', 'codex'],
|
|
87
87
|
hintWhenAuto: 'opt-in',
|
|
88
88
|
hintWhenManual: 'opt-in (rarely needed)',
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
|
-
name: '
|
|
91
|
+
name: 'ad-hooks',
|
|
92
92
|
autoIf: () => false,
|
|
93
93
|
agents: ['claude-code', 'codex'],
|
|
94
94
|
hintWhenAuto: 'opt-in',
|
|
@@ -103,14 +103,14 @@ export const CONDITIONAL_SKILLS = [
|
|
|
103
103
|
// The autoIf rule here is the universal-default; per-profile overrides
|
|
104
104
|
// come from `availableConditionalsForProfile`'s rule field.
|
|
105
105
|
{
|
|
106
|
-
name: '
|
|
106
|
+
name: 'ad-architecture',
|
|
107
107
|
autoIf: () => true,
|
|
108
108
|
agents: ['claude-code', 'codex'],
|
|
109
109
|
hintWhenAuto: 'system patterns + boundaries',
|
|
110
110
|
hintWhenManual: 'opt-in (recommended once load-bearing patterns emerge)',
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
name: '
|
|
113
|
+
name: 'ad-adr',
|
|
114
114
|
autoIf: () => true,
|
|
115
115
|
agents: ['claude-code', 'codex'],
|
|
116
116
|
hintWhenAuto: 'binding architectural decisions (Nygard pattern)',
|
|
@@ -325,7 +325,7 @@ export async function initCommand(opts) {
|
|
|
325
325
|
saveState(cwd, agent, nextStates[agent]);
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
-
// Dedup:
|
|
328
|
+
// Dedup: ad-architecture and ad-adr are universal at team /
|
|
329
329
|
// mature (in REQUIRED_SKILLS) AND conditional at solo (in
|
|
330
330
|
// CONDITIONAL_SKILLS) per review B1 (v0.11.3). Without the Set, the
|
|
331
331
|
// managed-skills section would list those rows twice.
|
|
@@ -361,38 +361,49 @@ export async function initCommand(opts) {
|
|
|
361
361
|
if (interactive) {
|
|
362
362
|
p.note(lines.join('\n'), 'Result');
|
|
363
363
|
const slashLine = [
|
|
364
|
-
'/
|
|
365
|
-
'/
|
|
366
|
-
'/
|
|
367
|
-
'/
|
|
368
|
-
'/
|
|
369
|
-
'/
|
|
370
|
-
'/
|
|
371
|
-
'/
|
|
372
|
-
'/
|
|
373
|
-
'/
|
|
374
|
-
'/
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
364
|
+
'/ad-bootstrap (AGENTS.md)',
|
|
365
|
+
'/ad-architecture (ARCHITECTURE.md)',
|
|
366
|
+
'/ad-adr',
|
|
367
|
+
'/ad-spec (doc/specs/)',
|
|
368
|
+
'/ad-task',
|
|
369
|
+
'/ad-audit',
|
|
370
|
+
'/ad-review (WORKFLOW §10)',
|
|
371
|
+
'/ad-ground (WORKFLOW §4 + §5)',
|
|
372
|
+
'/ad-next (state survey + recommendations)',
|
|
373
|
+
'/ad-spike (WORKFLOW §14 — staged spike with golden fixtures)',
|
|
374
|
+
'/ad-tdg (WORKFLOW §9 — outcome-based prompting + TDM)',
|
|
375
|
+
'/ad-domain (CONTEXT.md — Layer 2 ubiquitous language)',
|
|
376
|
+
'/ad-grill (interview-before-research)',
|
|
377
|
+
'/ad-deepen (WORKFLOW §8 — deepening opportunities)',
|
|
378
|
+
'/ad-diagnose (WORKFLOW §15 — five-phase diagnosis)',
|
|
379
|
+
'/ad-commit (Conventional Commits + DCO sign-off)',
|
|
380
|
+
'/ad-pr (open PR with uniform body)',
|
|
381
|
+
'/ad-merge (evaluate + merge PR)',
|
|
382
|
+
...(optedSkills.includes('ad-design') ? ['/ad-design (DESIGN.md)'] : []),
|
|
383
|
+
...(optedSkills.includes('ad-subagent') && agents.includes('claude-code')
|
|
384
|
+
? ['/ad-subagent']
|
|
378
385
|
: []),
|
|
379
|
-
...(optedSkills.includes('
|
|
380
|
-
...(optedSkills.includes('
|
|
386
|
+
...(optedSkills.includes('ad-skill') ? ['/ad-skill'] : []),
|
|
387
|
+
...(optedSkills.includes('ad-hooks') ? ['/ad-hooks (WORKFLOW §11)'] : []),
|
|
381
388
|
]
|
|
382
389
|
.filter((line) => {
|
|
383
390
|
// Filter the universal-set entries to only those actually installed
|
|
384
391
|
// for this profile.
|
|
385
392
|
const universalNames = requiredSkillsForProfile(profileName);
|
|
386
393
|
const universalLabels = {
|
|
387
|
-
'
|
|
388
|
-
'
|
|
389
|
-
'
|
|
390
|
-
'
|
|
391
|
-
'
|
|
392
|
-
'
|
|
393
|
-
'
|
|
394
|
-
'
|
|
395
|
-
|
|
394
|
+
'ad-bootstrap': '/ad-bootstrap (AGENTS.md)',
|
|
395
|
+
'ad-architecture': '/ad-architecture (ARCHITECTURE.md)',
|
|
396
|
+
'ad-adr': '/ad-adr',
|
|
397
|
+
'ad-spec': '/ad-spec (doc/specs/)',
|
|
398
|
+
'ad-task': '/ad-task',
|
|
399
|
+
'ad-audit': '/ad-audit',
|
|
400
|
+
'ad-review': '/ad-review (WORKFLOW §10)',
|
|
401
|
+
'ad-ground': '/ad-ground (WORKFLOW §4 + §5)',
|
|
402
|
+
'ad-deepen': '/ad-deepen (WORKFLOW §8 — deepening opportunities)',
|
|
403
|
+
'ad-commit': '/ad-commit (Conventional Commits + DCO sign-off)',
|
|
404
|
+
'ad-pr': '/ad-pr (open PR with uniform body)',
|
|
405
|
+
'ad-merge': '/ad-merge (evaluate + merge PR)',
|
|
406
|
+
// 'ad-philosophy' is implicit and not listed.
|
|
396
407
|
};
|
|
397
408
|
for (const [skill, label] of Object.entries(universalLabels)) {
|
|
398
409
|
if (line === label) return universalNames.includes(skill);
|
|
@@ -403,7 +414,7 @@ export async function initCommand(opts) {
|
|
|
403
414
|
p.outro(
|
|
404
415
|
`Done (profile: ${profileName}). In ${agents
|
|
405
416
|
.map((a) => AGENT_LABEL[a])
|
|
406
|
-
.join(' or ')}: ${slashLine}.
|
|
417
|
+
.join(' or ')}: ${slashLine}. ad-philosophy auto-loads on non-trivial work.`
|
|
407
418
|
);
|
|
408
419
|
} else {
|
|
409
420
|
for (const line of lines) {
|
package/src/commands/update.js
CHANGED
|
@@ -297,7 +297,7 @@ export async function updateCommand(opts) {
|
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
-
// Dedup:
|
|
300
|
+
// Dedup: ad-architecture and ad-adr are universal at team /
|
|
301
301
|
// mature (in REQUIRED_SKILLS) AND conditional at solo (in
|
|
302
302
|
// CONDITIONAL_SKILLS) per review B1 (v0.11.3). Without the Set, the
|
|
303
303
|
// managed-skills section would list those rows twice.
|