@ai-agent-lead/skills 1.2.0 → 1.4.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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/skills/README.md +19 -18
  3. package/skills/SKILL-TEMPLATE.md +5 -1
  4. package/skills/TRIGGERS.md +3 -3
  5. package/skills/WORKFLOWS.md +12 -15
  6. package/skills/bench/SKILL.md +0 -2
  7. package/skills/bench/templates/benchmark-report.md +10 -1
  8. package/skills/bootstrap/SKILL.md +0 -2
  9. package/skills/caveman/SKILL.md +0 -2
  10. package/skills/debug/SKILL.md +0 -2
  11. package/skills/design/ILLEGAL-STATES.md +12 -1
  12. package/skills/design/SKILL.md +1 -3
  13. package/skills/feature-doc/SKILL.md +3 -3
  14. package/skills/feature-doc/templates/feature-template.md +13 -1
  15. package/skills/formats/ADR-FORMAT.md +12 -2
  16. package/skills/{code-hygiene/SKILL.md → formats/CODE-HYGIENE.md} +27 -39
  17. package/skills/formats/CONTEXT-FORMAT.md +26 -0
  18. package/skills/formats/DOC-DRIFT-AUDIT.md +55 -0
  19. package/skills/formats/OKF.md +82 -0
  20. package/skills/formats/STYLE-comments.md +33 -44
  21. package/skills/grill-plan/SKILL.md +1 -3
  22. package/skills/improve-codebase-architecture/SKILL.md +1 -3
  23. package/skills/investigate/SKILL.md +0 -2
  24. package/skills/investigate/templates/research-note.md +13 -1
  25. package/skills/pr-review/SKILL.md +7 -20
  26. package/skills/prod-ready/SKILL.md +8 -8
  27. package/skills/security-review/SKILL.md +0 -2
  28. package/skills/simplify/SKILL.md +4 -12
  29. package/skills/system-design/SKILL.md +1 -3
  30. package/skills/tdd/SKILL.md +5 -2
  31. package/skills/tdd-rounds/SKILL.md +2 -14
  32. package/skills/verify-real-deps/SKILL.md +0 -2
  33. package/skills/verify-real-deps/templates/known-issues.md +11 -0
  34. package/skills/zoom-out/SKILL.md +0 -2
  35. package/skills/sync-check/SKILL.md +0 -69
@@ -0,0 +1,55 @@
1
+ # Doc-Drift Audit
2
+
3
+ The single source for one question: *does this change leave the durable docs consistent with the code?* Implementation lands → docs drift. The natural moment to catch the drift is at the merge boundary, not "next sprint".
4
+
5
+ This is a **shared reference**, run from three places with the same checks but a different lens:
6
+
7
+ - [`prod-ready`](../prod-ready/SKILL.md) Section 7 — **author lens.** Walk the checks before opening the PR; fix drift inline now.
8
+ - [`pr-review`](../pr-review/SKILL.md) §3e — **reviewer lens.** Second line of defense; what the author missed, classified by severity.
9
+ - **Standalone** — the old `sync-check` role. Run mid-stream after a significant refactor, or when a name feels "off", to surface terminology and ADR drift before it calcifies. Produces a numbered findings list (see "Standalone report" below).
10
+
11
+ Files don't need to pre-exist — `docs/adr/`, `CONTEXT.md`, design notes are created lazily when the first relevant change appears. If a doc type isn't relevant to this work, write `n/a` — explicit beats implicit.
12
+
13
+ ## The six checks
14
+
15
+ One question per doc type: *did this work change X? Then update Y.*
16
+
17
+ 1. **New decision with viable alternatives** → an ADR exists in `docs/adr/`, names what it supersedes (if anything), and is referenced from code where the decision is load-bearing. See [`ADR-FORMAT.md`](ADR-FORMAT.md).
18
+ 2. **New or changed domain term** → [`docs/CONTEXT.md`](../../docs/CONTEXT.md) entry created or updated, including `_Avoid_:` aliases if the term risks being confused with an existing one. A new term that collides with an existing `_Avoid_:` alias (e.g. "Account" where the glossary says "Customer") is the highest-signal finding here.
19
+ 3. **New/removed package, changed public interface, or shifted module boundary** → the feature's design note (`docs/features/<feature>.design.md`) is updated: module map, file layout, public-interface signatures, test boundaries.
20
+ 4. **Changed acceptance criteria** → the feature doc reflects what was actually built. Silently-dropped or silently-added behavior is the most common drift class — fix here, don't kick to a follow-up.
21
+ 5. **User-visible change** → `CHANGELOG.md` has an entry under `[Unreleased]`, grouped by `Added / Changed / Fixed / Removed`. Skip only for formatter-only / lint-only / test-only / internal-refactor-with-no-behavior-change / dep-bump-with-no-runtime-impact diffs. (Overlaps but is **not identical** to `feature-doc`'s skip list, which also waives the *doc* for typo fixes and one-line config tweaks. A typo fix can still merit a one-liner here.)
22
+ 6. **New or changed produced doc under `docs/`** → it opens with OKF frontmatter carrying a non-empty `type` from [`OKF.md`](OKF.md) §2. A produced doc with no `type` breaks bundle conformance.
23
+
24
+ ## ADR consistency (read alongside check 1)
25
+
26
+ Beyond "does an ADR exist", check the change against the ones already recorded:
27
+
28
+ - **Direct contradiction** — does the change do something an active ADR explicitly forbids (e.g. uses an ORM where an ADR mandates hand-written SQL)? That's a blocker until the ADR is superseded.
29
+ - **Surprise deviation** — does the change introduce a pattern that *warrants* a new ADR (hard to reverse, surprising, a real trade-off) but doesn't have one?
30
+
31
+ ## Severity
32
+
33
+ - **Blocker** — the missing/contradicted doc is load-bearing for the next reader: an ADR for a hard-to-reverse decision, a `CONTEXT.md` entry for a term other changes will use, an AC drift hiding behavior, or a direct ADR contradiction.
34
+ - **Suggestion** — the doc would help but the diff is self-explanatory in isolation.
35
+
36
+ In the author lens (`prod-ready`) every check resolves to `✓`, `✗ + remediation`, or `n/a + reason` and is fixed before the PR. In the reviewer lens (`pr-review`) an unresolved check without `n/a + reason` is a finding at the severity above.
37
+
38
+ ## Standalone report
39
+
40
+ When run on its own (the former `sync-check`), output a numbered list. For each finding:
41
+
42
+ - **Location** — `file:line` or `ADR-NNNN`.
43
+ - **Severity** — `Blocker` or `Suggestion` per above.
44
+ - **Finding** — e.g. "Code uses 'Account', but `CONTEXT.md` specifies 'Customer'."
45
+ - **Recommended action** — e.g. "Rename to 'Customer', or update `CONTEXT.md` if the concept is genuinely new."
46
+
47
+ If a contradiction is found in *existing* code (not just this diff), escalate to [`grill-plan`](../grill-plan/SKILL.md) to resolve the terminology or architectural mismatch.
48
+
49
+ ## Done when
50
+
51
+ - Every relevant check is `✓`, `✗ + remediation`, or `n/a + reason`.
52
+ - Every `_Avoid_:` alias appearing in the diff has been flagged.
53
+ - Every deviation from an active ADR has been surfaced.
54
+
55
+ The doc-map is small enough to walk in 2–3 minutes. Skip it and you're trading 3 minutes now for an hour of orientation in 3 months.
@@ -0,0 +1,82 @@
1
+ # OKF Frontmatter for Produced Docs
2
+
3
+ Every document a skill writes under `docs/` carries [Open Knowledge Format](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf) (OKF v0.1) YAML frontmatter. That makes the whole `docs/` tree a consumable OKF **bundle** — a directory of markdown "concept" files any OKF-aware tool, agent, or static server can ingest, with no change to how we author.
4
+
5
+ This is the substrate every doc-producing skill consumes (`feature-doc`, `investigate`, `bootstrap`, `grill-plan`, `bench`, `tdd-rounds`, `verify-real-deps`, …) — the way `STYLE-comments.md` is the substrate for comments. The per-skill templates carry a filled-in frontmatter block; this doc is the contract behind them.
6
+
7
+ > **Why OKF and not our own scheme:** the format is vendor-neutral and additive — the only hard requirement is a non-empty `type`, and consumers preserve unknown keys. We get interop for free without giving up any of our existing structure.
8
+
9
+ ---
10
+
11
+ ## 1. The frontmatter block
12
+
13
+ Every non-reserved `.md` file under `docs/` opens with a YAML frontmatter block:
14
+
15
+ ```yaml
16
+ ---
17
+ type: feature
18
+ title: Distributed State for TDD Rounds
19
+ description: Feature-scoped state replaces the global STATE.md to cut merge conflicts.
20
+ tags: [tdd-rounds, state, architecture]
21
+ timestamp: 2026-05-25
22
+ ---
23
+ ```
24
+
25
+ | Field | OKF status | Rule |
26
+ | --- | --- | --- |
27
+ | `type` | **required** | One value from the vocabulary in §2. Non-empty. This is the only field a bundle is rejected for missing. |
28
+ | `title` | recommended | Human-readable display name. Mirror the `# H1`. Omit only if the filename already says it. |
29
+ | `description` | recommended | One sentence. Reuse the doc's opening sentence — don't invent a second summary. |
30
+ | `tags` | recommended | YAML list of short cross-cutting labels. Skip rather than pad. |
31
+ | `timestamp` | recommended | ISO 8601 date (or datetime) of the last meaningful change. This is the canonical home for the date — do **not** also keep a `**Date:**` bold line. |
32
+ | `resource` | recommended | A URI for the underlying asset. Our docs are abstract concepts, so in practice this is usually **absent** — include it only when the doc fronts a real external resource (a dashboard, a BigQuery table, an API). |
33
+
34
+ **Extension keys** are allowed and encouraged where a doc kind carries status OKF doesn't model. Our kinds keep `status:` (and `owner:` on feature docs) as extension keys *in addition to* the human-facing `**Status:**` / `**Owner:**` bold lines the skills already read. OKF consumers preserve them; our skills keep working.
35
+
36
+ ---
37
+
38
+ ## 2. The `type` vocabulary
39
+
40
+ OKF does not register types centrally — producers pick descriptive, self-explanatory values and consumers tolerate unknowns. These are the values this repo's skills emit:
41
+
42
+ | Doc kind | `type` | Produced by | Lives in |
43
+ | --- | --- | --- | --- |
44
+ | Architecture decision record | `adr` | `bootstrap`, `grill-plan`, `investigate` handoff | `docs/adr/NNNN-slug.md` |
45
+ | Feature contract | `feature` | `feature-doc` | `docs/features/<name>.md` |
46
+ | Module / interface design note | `design` | `design` | `docs/features/<name>.design.md` |
47
+ | Research / options note | `research` | `investigate` | `docs/research/<topic>.md` |
48
+ | Ubiquitous-language map | `context` | `bootstrap`, `grill-plan` | `docs/CONTEXT.md` |
49
+ | Multi-context map | `context-map` | `bootstrap` | `CONTEXT-MAP.md` |
50
+ | Repo conventions | `convention` | `bootstrap` | `docs/CONVENTIONS.md` |
51
+ | Accepted-but-unimplemented tracker | `known-issues` | `tdd-rounds`, `verify-real-deps` | `docs/known-issues.md` |
52
+ | Benchmark report | `benchmark` | `bench` | `docs/bench/<name>.md` |
53
+ | Round / feature state | `state` | `tdd-rounds` | `docs/features/<name>/state/*.md` |
54
+
55
+ Pick the closest existing value before inventing a new one. A new doc kind adds a row here in the same change that first emits it.
56
+
57
+ ---
58
+
59
+ ## 3. Bundle conventions
60
+
61
+ `docs/` is the bundle root. Two filenames are **reserved** by OKF and never used for a concept:
62
+
63
+ - **`index.md`** — a directory listing for progressive disclosure. No frontmatter. Entries are `* [Title](relative-url) — short description`, optionally grouped under `## Section` headings. Add `docs/index.md` once the bundle has more than a couple of files; keep it current as docs are added.
64
+ - **`log.md`** — a date-grouped changelog. Our repo's root **`CHANGELOG.md`** already plays this role (Keep-a-Changelog, newest first); treat it as the bundle's log rather than adding a second file. An OKF consumer tolerates the absence of `log.md`.
65
+
66
+ **Cross-references** between docs are plain markdown links. OKF accepts two forms: **bundle-relative** (begin with `/`, resolved from the bundle root: `/adr/0001-distributed-state.md`) and **relative** (`../known-issues.md`). Bundle-relative is the more move-stable form, but this repo's docs use ordinary **relative** links by convention (they also reach files outside the bundle, like `../skills/formats/OKF.md`), and both are equally valid. A link asserts a *relationship* — the kind (supersedes, depends-on, refines) is carried by the surrounding prose, not the link. Broken links are tolerated, not malformed.
67
+
68
+ **Body:** no required sections. Favor structural markdown (headings, lists, tables, fenced code) over prose — it aids both human reading and agent retrieval. The headings `# Schema`, `# Examples`, `# Citations` carry their conventional OKF meaning when present.
69
+
70
+ ---
71
+
72
+ ## 4. Conformance checklist
73
+
74
+ A produced doc is OKF-conformant when:
75
+
76
+ - [ ] It opens with a parseable YAML frontmatter block.
77
+ - [ ] `type` is present and non-empty, drawn from §2 (or added there in the same change).
78
+ - [ ] `title` mirrors the H1; `description` reuses the opening sentence; the date lives only in `timestamp`.
79
+ - [ ] Reserved filenames (`index.md`, `log.md` / `CHANGELOG.md`) follow §3 and are **not** used for concepts.
80
+ - [ ] Cross-links use bundle-relative (`/…`) or relative paths.
81
+
82
+ This checklist is enforced at the doc-drift audits in `pr-review` (§3e) and `prod-ready` (Section 7) — a produced doc missing `type` is a finding.
@@ -1,59 +1,58 @@
1
1
  # Comment Style
2
2
 
3
- Codifies the comment discipline for this codebase. New contributors (human or agent) should match what's here, and what's already in the code, rather than re-deriving conventions per package.
3
+ Codifies the comment discipline for this codebase. New contributors (human or agent) match what's here, rather than re-deriving conventions per package.
4
4
 
5
- > Default: write **no** comment. Add one only when the WHY is non-obvious.
5
+ > **Default: write NO comment.** Add one only when the WHY is non-obvious AND a future reader is likely to make the opposite assumption.
6
6
 
7
- The code's identifiers, types, and structure already explain the *what*. A comment earns its line only when it captures something the reader cannot recover by reading the next ten lines: a constraint, an invariant, a trade-off, a workaround, or a pointer to the decision record.
7
+ The code's identifiers, types, and structure explain the *what*. A comment earns its line only when it captures something the reader cannot recover by reading the next ten lines: a constraint, an invariant, a trade-off, or a pointer to the decision record. If you're unsure whether a comment earns its keep, **delete it** — git history and the next maintainer will be fine.
8
8
 
9
9
  ---
10
10
 
11
- ## 1. Five kinds of comment we keep
11
+ ## 1. Three kinds of comment we keep
12
12
 
13
- ### 1.1 Package docstring (required, one per package)
13
+ ### 1.1 Package docstring (one per package, only when the design needs it)
14
14
 
15
- Every package starts with a multi-paragraph docstring block in its primary file.
16
-
17
- Shape:
15
+ A package whose design choice or invariant would not be obvious from reading the primary file gets a short docstring block:
18
16
  - One-line purpose.
19
17
  - One paragraph on the design choice and its rationale.
20
- - Round / ADR provenance for major decisions.
21
18
  - The failure mode or invariant the next reader needs to know.
22
19
 
23
- ### 1.2 Docstrings on every exported identifier (required)
24
-
25
- - Starts with the identifier name (`// Cache stores …`, not `// Stores …`).
26
- - Interface methods state the **contract**, not just the action: is the call cheap, idempotent, safe under concurrency, called once per request or many times?
20
+ A package that is what it says it is (a thin utility, a generated stub, a glue adapter) does not need a docstring. Don't pad.
27
21
 
28
- ### 1.3 Invariant / constraint comments (encouraged)
22
+ ### 1.2 Docstrings on exported identifiers (only when the contract is non-obvious from the signature)
29
23
 
30
- A comment that catches a bug the next maintainer would otherwise write.
31
- - `// Zero means 'unknown'` (and re-stated where the bug would bite).
32
- - `// Selector must be cheap and side-effect-free; ServeHTTP may invoke Pick multiple times on 429 retry.`
24
+ Skip the docstring on getters, simple constructors, and any function whose name + types already convey the contract. Write one only when:
25
+ - The call is **not** cheap, idempotent, or safe under concurrency, and the next reader would assume it was.
26
+ - The function may be invoked multiple times per request (e.g. retried) and that matters.
27
+ - A parameter or return has non-obvious zero-value or nil semantics (`0 = "unknown"`, `(nil, nil) = "not found"`).
33
28
 
34
- ### 1.4 Trade-off comments (encouraged)
29
+ When you write one, start with the identifier name (`// Cache stores …`, not `// Stores …`).
35
30
 
36
- Name the alternative considered and why it lost. Cite the failure mode if the choice has one.
31
+ ### 1.3 Invariant / constraint / trade-off / provenance (only when the alternative would otherwise be reattempted)
37
32
 
38
- ### 1.5 Provenance comments (use the grammar in §3)
33
+ A comment whose absence would let the next maintainer write the bug, reattempt the rejected alternative, or "fix" the deliberate choice. If the next reader would just say "OK, sure" and move on, the comment is not earning its line.
39
34
 
40
- Anchor non-obvious behavior to its decision record (ADR, round, AC, snapshot).
35
+ - **Invariant** `// Zero means 'unknown'` (and re-stated where the bug would bite).
36
+ - **Constraint** — `// Selector must be cheap and side-effect-free; ServeHTTP may invoke Pick multiple times on 429 retry.`
37
+ - **Trade-off** — `// Cold-cache choice: an account whose (pk, model) is not yet in the cache is treated as INELIGIBLE.`
38
+ - **Provenance** — `// Manual SQL instead of ORM — see ADR-007 §"Query shape".`
41
39
 
42
40
  ---
43
41
 
44
- ## 2. Five kinds of comment we delete on sight
42
+ ## 2. Six kinds of comment we delete on sight
45
43
 
46
- 1. **Restates the code.** `// increment i`, `// return the user`, `// loop over items`. The code already says it.
44
+ 1. **Restates the code.** `// increment i`, `// return the user`, `// loop over items`.
47
45
  2. **Commented-out code.** Git has it. Delete.
48
- 3. **"Added for X" / "Used by Y" caller references.** These rot the day someone renames or removes the caller. Use `grep` instead.
46
+ 3. **"Added for X" / "Used by Y" caller references.** These rot the day someone renames or removes the caller. Use `grep`.
49
47
  4. **Banner / ASCII-art dividers.** `// =====` and `// --- section ---`. Use a function or a file boundary, not a banner.
50
48
  5. **Stale TODO / FIXME / HACK with no owner, ticket, ADR, or date.** Either link it to a decision record or fix it now.
49
+ 6. **Section-header comments inside a function.** `// validate`, `// build response`, `// compute total`. If a function needs internal section headers, extract those sections into named functions — the function name is the comment.
51
50
 
52
51
  ---
53
52
 
54
53
  ## 3. Provenance grammar (canonical forms)
55
54
 
56
- When a comment cites the project record, use **exactly one** of these forms. Comments that follow the canonical grammar are greppable and stable.
55
+ When a kept comment cites the project record, use **exactly one** of these forms. Comments that follow the canonical grammar are greppable and stable.
57
56
 
58
57
  | Kind | Canonical form | Examples |
59
58
  | -------------------------------------- | ----------------------- | --------------------------------------- |
@@ -82,32 +81,22 @@ If the explanation needs more than **~6 lines**, the right home is an ADR or a `
82
81
 
83
82
  ---
84
83
 
85
- ## 5. "Documented for the next reader" framing
86
-
87
- When a comment exists because a future reader is **likely to make the opposite assumption**, say so explicitly:
88
-
89
- ```go
90
- // Cold-cache choice (documented for the next reader): an account whose
91
- // (pk, model) is not yet in the cache is treated as INELIGIBLE …
92
- ```
93
-
94
- ---
95
-
96
- ## 6. Test files
84
+ ## 5. Test files
97
85
 
98
- Non-trivial tests — those with fakes, harnesses, time control, channel-driven ceremonies, or unusual lifecycle — get a **5–20 line block comment at the top** of the file (or above the harness type) stating:
86
+ Non-trivial tests — those with fakes, harnesses, time control, or unusual lifecycle — get a **5–20 line block comment** at the top of the file (or above the harness type) stating:
99
87
  - What is **faked** versus real (and why each choice).
100
88
  - Why the design (deterministic? avoid `time.Sleep`? exercise a specific retry path?).
101
- - Which knobs are overridden for the test and to **what value**.
89
+ - Which knobs are overridden and to **what value**.
90
+
91
+ Trivial tests get nothing. The test name carries the intent.
102
92
 
103
93
  ---
104
94
 
105
- ## 7. Done when
95
+ ## 6. Done when
106
96
 
107
97
  Apply this checklist during the [`simplify`](../simplify/SKILL.md) sweep or in code review:
108
- - [ ] Every package has a docstring matching §1.1.
109
- - [ ] Every exported identifier has a docstring starting with its name.
110
- - [ ] Every comment that survived the sweep is a why, an invariant, a trade-off, or a provenance link — none restates the code.
111
- - [ ] No commented-out code, no `// used by X`, no banner dividers, no orphan TODOs.
98
+ - [ ] Every surviving comment names a why, invariant, trade-off, or provenance link — none restates the code.
99
+ - [ ] No commented-out code, no `// used by X`, no banner dividers, no orphan TODOs, no in-function section headers.
112
100
  - [ ] Every provenance citation matches the canonical grammar in §3.
101
+ - [ ] Docstrings on exported identifiers exist only where the contract isn't obvious from the signature.
113
102
  - [ ] Test files with non-trivial harnesses have a strategy preamble; trivial ones do not.
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: grill-plan
3
3
  description: Grilling session that stress-tests a chosen plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use AFTER a direction has been picked (post-`investigate` or post-`feature-doc`), when the user wants to pressure-test the plan — triggered by phrases like "grill me on this", "stress-test this plan", "walk me through this", "is this consistent with our model". Skip if the direction is still being explored — use `investigate` instead.
4
- complexity: medium
5
- expected_duration: 20 minutes
6
4
  ---
7
5
 
8
6
  ## When to use
@@ -98,7 +96,7 @@ If any of the three is missing, skip the ADR. Use the format in [`../formats/ADR
98
96
  ## Pairing with other skills
99
97
 
100
98
  - **[`investigate`](../investigate/SKILL.md)** — runs *before* when direction is unclear. Once a direction is chosen, hand off here.
101
- - **[`sync-check`](../sync-check/SKILL.md)** — escalates here when a terminology collision or ADR contradiction is found in existing code.
99
+ - **[`DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md)** — the terminology/ADR audit (formerly the `sync-check` skill) escalates here when it finds a terminology collision or ADR contradiction in existing code.
102
100
  - **[`feature-doc`](../feature-doc/SKILL.md)** — runs *before* when a feature doc is the input to grilling, or *after* when grilling refines the plan into a feature doc.
103
101
  - **[`system-design`](../system-design/SKILL.md)** — defers here for hard-to-reverse topology decisions.
104
102
  - **[`improve-codebase-architecture`](../improve-codebase-architecture/SKILL.md)** — borrows this skill's grilling discipline in its own grilling loop.
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: improve-codebase-architecture
3
3
  description: Find deepening opportunities in EXISTING code, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable. Use for EXISTING code; for designing the shape of a new module from scratch, use `design`. Skip for single-module local refactors with no cross-module impact — use `design` or just refactor inline.
4
- complexity: high
5
- expected_duration: 45 minutes
6
4
  ---
7
5
 
8
6
  # Improve Codebase Architecture
@@ -20,7 +18,7 @@ Surface architectural friction and propose **deepening opportunities** — refac
20
18
  - Designing the shape of a new module from scratch — use [`design`](../design/SKILL.md).
21
19
  - Greenfield system topology — use [`system-design`](../system-design/SKILL.md).
22
20
  - Single-module local refactor with no cross-module impact — use `design` or refactor inline.
23
- - Line-level cleanup (renames, dead-code removal) — use [`code-hygiene`](../code-hygiene/SKILL.md) + [`simplify`](../simplify/SKILL.md).
21
+ - Line-level cleanup (renames, dead-code removal) — use the [`code-hygiene`](../formats/CODE-HYGIENE.md) lens + [`simplify`](../simplify/SKILL.md).
24
22
 
25
23
  ## Glossary
26
24
 
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: investigate
3
3
  description: Use when the user asks for investigation, research, a proposal, or "options" before any code lands; or proactively for non-trivial structural decisions (new dependency, framework choice, API contract change, cross-cutting refactor). Triggered by phrases like "investigate X", "research Y", "give me a proposal", "what are our options", "how would we approach", "let's explore", "should we...". Produces a durable research note in `docs/research/<topic>.md`. Skip for tasks where one obvious approach exists (typo fixes, config tweaks, mechanical refactors). Pairs with `feature-doc` (captures *what* we're building once a direction is chosen) and `grill-plan` (stress-tests a chosen plan).
4
- complexity: medium
5
- expected_duration: 20 minutes
6
4
  ---
7
5
 
8
6
  # Investigation Workflow
@@ -1,8 +1,20 @@
1
+ ---
2
+ type: research
3
+ title: "Research: <topic>"
4
+ description: <one sentence — the question this note investigates>
5
+ tags: [<area>]
6
+ timestamp: YYYY-MM-DD
7
+ status: Open
8
+ owner: <user>
9
+ ---
10
+
11
+ <!-- Frontmatter is OKF per skills/formats/OKF.md. `timestamp` is the canonical date;
12
+ `status`/`owner` mirror the human-facing lines below (OKF models neither). -->
13
+
1
14
  # Research: <topic>
2
15
 
3
16
  **Status:** Open | Decided | Superseded
4
17
  **Owner:** <user>
5
- **Date:** YYYY-MM-DD
6
18
 
7
19
  <!--
8
20
  Status values:
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: pr-review
3
- description: Discipline for reviewing someone else's pull request — the inverse of `prod-ready` (which is the author's pre-merge gate). Use when the user asks to "review this PR", "look over the diff", "check this change", "give feedback on", or invokes a code-review slash command. Reviews against the linked feature doc / ADRs / domain vocabulary, classifies findings by severity (blocker / suggestion / nit), and returns a structured report. Skip for trivial PRs (typo, dep bump, lint-only) — approve directly. Pairs with `prod-ready` (the author's checklist; the reviewer verifies it landed honestly), `security-review` (escalation when the diff is surface-changing), and `code-hygiene` (the line-level lens applied during the read).
4
- complexity: medium
5
- expected_duration: 20 minutes
3
+ description: Discipline for reviewing someone else's pull request — the inverse of `prod-ready` (which is the author's pre-merge gate). Use when the user asks to "review this PR", "look over the diff", "check this change", "give feedback on", or invokes a code-review slash command. Reviews against the linked feature doc / ADRs / domain vocabulary, classifies findings by severity (blocker / suggestion / nit), and returns a structured report. Skip for trivial PRs (typo, dep bump, lint-only) — approve directly. Pairs with `prod-ready` (the author's checklist; the reviewer verifies it landed honestly), `security-review` (escalation when the diff is surface-changing), and the `code-hygiene` lens (`formats/CODE-HYGIENE.md`, applied line-level during the read).
6
4
  ---
7
5
 
8
6
  # PR Review
@@ -87,24 +85,13 @@ For non-surface-changing diffs: walk `prod-ready` Section 3 (defense-in-depth) b
87
85
 
88
86
  #### 3e. Doc-drift audit
89
87
 
90
- This is the second line of defense for `prod-ready` Section 7. Author may have missed it; reviewer catches what's left. Walk these four questions against the diff:
88
+ Walk the six checks in [`skills/formats/DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) against the diff — **reviewer lens**. This is the second line of defense for `prod-ready` Section 7: the author may have missed it; you catch what's left. Any check that resolves to "no" without `n/a + reason` is a finding, at the severity that reference defines — **Blocker** for load-bearing drift (a missing ADR for a hard-to-reverse decision, a `CONTEXT.md` entry for a term other PRs will use, AC drift hiding behavior, a direct ADR contradiction), **Suggestion** when the diff is self-explanatory in isolation.
91
89
 
92
- - **New decision with viable alternatives** → does an ADR exist in `docs/adr/` for it? Does it name what it supersedes? If load-bearing, is it referenced from the code?
93
- - **New or changed domain term** → has [`docs/CONTEXT.md`](../../docs/CONTEXT.md) been updated? Are `_Avoid_:` aliases listed if there's risk of confusion?
94
- - **New / removed package, changed public interface, shifted module boundary** → is the feature's design note (`docs/features/<feature>.design.md`) updated? Module map, file layout, public-interface signatures, test boundaries.
95
- - **Changed acceptance criteria** → does the feature doc reflect what was actually built? Silently-dropped or silently-added behavior is the most common drift class — flag and don't accept "we'll fix in a follow-up".
90
+ #### 3f. Hygiene (line level)
96
91
 
97
- If any answer is "no" without `n/a + reason`, that's a finding. Severity:
98
- - **Blocker** — the missing doc is load-bearing for the next reader (ADR for a hard-to-reverse decision; CONTEXT.md entry for a term other PRs will use; AC drift hiding behavior).
99
- - **Suggestion** — the doc would help but the diff is self-explanatory in isolation.
92
+ Apply the [`code-hygiene`](../formats/CODE-HYGIENE.md) lens here, not as a primary phase:
100
93
 
101
- The doc-map is small enough to walk in 2–3 minutes. Skip it and you're trading 3 minutes now for an hour of orientation in 3 months.
102
-
103
- #### 3e. Hygiene (line level)
104
-
105
- Apply `code-hygiene` as a lens here, not as a primary phase:
106
-
107
- - **Comment churn**: new WHAT-comments, stale "used by X" references, citation grammar that doesn't match the repo's comment style doc ([`skills/formats/STYLE-comments.md`](../formats/STYLE-comments.md)). These are nits individually; in aggregate they're a signal the author didn't run `simplify`. Flag as suggestions, not blockers.
94
+ - **Comment noise**: new WHAT-comments, docstrings on exports whose contract is obvious from the signature, in-function section headers (`// validate`, `// build response`), stale "used by X" references, citation grammar that doesn't match the repo's comment style doc ([`skills/formats/STYLE-comments.md`](../formats/STYLE-comments.md)). Flag as **nits by default**; promote to a suggestion only when cumulative comment noise obscures the diff (signal the author skipped `simplify`).
108
95
  - Names that mislead (boolean returning non-bool, `getX` that mutates, `Manager`/`Helper` suffixes hiding what the thing is).
109
96
  - Cleverness that earns its cost? Or could be boring?
110
97
  - YAGNI — "in case we need it" parameters / interfaces / classes? Strip.
@@ -184,9 +171,9 @@ The classification (blocker / suggestion / nit) lives in the parent's notes; onl
184
171
  ## Pairing with other skills
185
172
 
186
173
  - **`prod-ready`** is the author's pre-merge checklist. Reviewer verifies it landed.
187
- - **`sync-check`** is the diagnostic context auditor. Reviewer runs it (or verifies it was run) to catch terminology drift and ADR contradictions early.
174
+ - **[`DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md)** is the shared terminology/ADR/doc-map audit run from §3e the former `sync-check` skill, now single-sourced and shared with `prod-ready` Section 7.
188
175
  - **`security-review`** is the surface-change escalation. Reviewer flags when required.
189
- - **`code-hygiene`** is the line-level lens applied during the read.
176
+ - **[`code-hygiene`](../formats/CODE-HYGIENE.md)** is the line-level lens applied during the read (§3f).
190
177
  - **`grill-plan`** is where load-bearing disagreements go (a new ADR, not a PR comment thread).
191
178
  - **`debug`** if a finding turns out to be "this PR introduces a bug" — switch to debug to characterise it before recommending a change.
192
179
 
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: prod-ready
3
3
  description: Pre-merge production-readiness checklist — operational, infrastructure, and consistency checks that tests alone don't surface. Use after `tdd` reaches green; before opening a PR or merging to main; after significant infra changes (new DB, new deployment target, new auth flow); or when the user mentions "shipping", "ready to merge", "before deploy", "production readiness", or "prod-ready". Pairs with the `tdd` skill — tdd proves the feature works; this catches what tests can't see (server timeouts, DB pragmas, error-response consistency, secrets at rest).
4
- complexity: low
5
- expected_duration: 10 minutes
6
4
  ---
7
5
 
8
6
  # Prod-Readiness Checklist
@@ -54,14 +52,16 @@ Walk each section. An item is OK to fail **only if** the feature doc's Notes / N
54
52
 
55
53
  ### 7. Documentation (the doc-map)
56
54
 
57
- Implementation lands → docs drift. The natural moment to catch drift is now, not "next sprint". One question per doc type: *did this work change X? Then update Y.* Files don't need to pre-exist — create `docs/adr/`, `CONTEXT.md`, design notes lazily when the first relevant change appears.
55
+ Implementation lands → docs drift. The natural moment to catch drift is now, not "next sprint". Walk the six checks in [`skills/formats/DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) **author lens**: tick each `✓`, `✗ + remediation`, or `n/a + reason`, and fix the drift inline before the PR (don't kick it to a follow-up). Files don't need to pre-exist — create `docs/adr/`, `CONTEXT.md`, design notes lazily when the first relevant change appears.
58
56
 
59
- - [ ] **New decision with viable alternatives** → ADR exists in `docs/adr/`, names what it supersedes (if anything), and is referenced from code where the decision is load-bearing.
60
- - [ ] **New or changed domain term** → `CONTEXT.md` entry created or updated. Includes `_Avoid_:` aliases if the term is at risk of being confused with an existing one.
61
- - [ ] **New/removed package, changed public interface, or shifted module boundary** → the feature's design note (e.g., `docs/features/<feature>.design.md`) updated. Specifically: Module map, File layout, public-interface signatures, Test boundaries.
62
- - [ ] **Changed acceptance criteria** → the feature doc reflects what was actually built. Silently-dropped or silently-added behavior is the most common drift class — fix here, don't kick to a follow-up.
57
+ - [ ] ADR for any new decision with viable alternatives (and no active ADR is contradicted).
58
+ - [ ] `CONTEXT.md` updated for any new/changed domain term, with `_Avoid_:` aliases where confusion is likely.
59
+ - [ ] Design note updated for any new/removed package, changed public interface, or shifted module boundary.
60
+ - [ ] Feature doc reflects what was actually built (no silently-dropped or silently-added behavior).
61
+ - [ ] `CHANGELOG.md` `[Unreleased]` entry for any user-visible change.
62
+ - [ ] Every new/changed `docs/` file opens with OKF `type` frontmatter.
63
63
 
64
- If a doc type isn't relevant to this work, write "n/a" explicit beats implicit.
64
+ Per-check definitions, skip lists, and severity live in [`DOC-DRIFT-AUDIT.md`](../formats/DOC-DRIFT-AUDIT.md) — this is the same audit `pr-review` §3e runs from the reviewer side.
65
65
 
66
66
  ## When to skip
67
67
 
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: security-review
3
3
  description: Threat-model + control-review pass for surface-changing work — runs alongside `tdd` and as a heavier gate than `prod-ready` Section 3 when the change introduces or alters trust boundaries, authentication, authorization, sensitive data flows, or external surfaces. Use when the user mentions "security review", "threat model", "STRIDE", "auth flow", "permissions", "secrets", "PII", "public API", "external surface", "abuse", "hardening", or whenever a feature doc / PR adds a new entry point, identity flow, or sensitive-data path. Skip for pure-internal refactors with no surface change, dependency bumps that don't change runtime behavior, or doc-only changes. Pairs with `feature-doc` (informs the threat model) and `prod-ready` (which has the lighter operational-security checklist for every change).
4
- complexity: high
5
- expected_duration: 30 minutes
6
4
  ---
7
5
 
8
6
  # Security Review
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: simplify
3
- description: Single end-of-round sweep that tightens what `tdd` just left green — review every changed file for reuse, quality, efficiency, and test relevance. Use after `tdd` reaches green and before opening a PR (or before a Builder closes a round in `tdd-rounds`). Triggered by phrases like "simplify pass", "tighten this", "clean up before commit", "end-of-round sweep", or appearing as a step in a Builder brief. Skip for trivial diffs (typo, dep bump, doc-only). Pairs with `tdd` (runs immediately after green), `code-hygiene` (the lens applied during the sweep), and `pr-review` (a self-check after this).
4
- complexity: low
5
- expected_duration: 10 minutes
3
+ description: Single end-of-round sweep that tightens what `tdd` just left green — review every changed file for reuse, quality, efficiency, and test relevance. Use after `tdd` reaches green and before opening a PR (or before a Builder closes a round in `tdd-rounds`). Triggered by phrases like "simplify pass", "tighten this", "clean up before commit", "end-of-round sweep", or appearing as a step in a Builder brief. Skip for trivial diffs (typo, dep bump, doc-only). Pairs with `tdd` (runs immediately after green), the `code-hygiene` lens (`formats/CODE-HYGIENE.md`, applied during the sweep), and `pr-review` (a self-check after this).
6
4
  ---
7
5
 
8
6
  # Simplify
@@ -34,7 +32,7 @@ The simplify pass catches these once, deliberately, before the diff lands. Witho
34
32
  - Slices where the diff is one or two lines and there's nothing to sweep.
35
33
  - During red phase — never refactor while red. See [`tdd/SKILL.md`](../tdd/SKILL.md).
36
34
 
37
- ## The four lenses
35
+ ## The five lenses
38
36
 
39
37
  Walk every changed file. Apply each lens in order. Fix what you find inline.
40
38
 
@@ -49,13 +47,7 @@ Walk every changed file. Apply each lens in order. Fix what you find inline.
49
47
  - Names that read clearly out of context — would a stranger guess what `result`, `data`, `value` referred to? If not, rename.
50
48
  - Error messages that name the failing input — `"could not parse: <value>"` beats `"parse error"`.
51
49
  - Abstractions that haven't earned their keep — a base class with one subclass, an interface with one implementation. Inline.
52
- - Comments:
53
- - Delete WHAT-comments (the code already says it).
54
- - Delete "used by X" / "added for Y" caller references — these rot; use grep.
55
- - Delete commented-out code (git has it).
56
- - Delete banner / ASCII-art dividers.
57
- - KEEP why-comments: constraint, invariant, trade-off, provenance.
58
- - If a kept comment cites a round / ADR / AC / snapshot, normalize to the project grammar in [`skills/formats/STYLE-comments.md`](../formats/STYLE-comments.md) (§3 — `ADR-007 §7`, `R6 AC-3`, `v0.3 R1b2`, `snapshot §"Invariants"`).
50
+ - Comments — **default during the sweep is DELETE.** Apply [`CODE-HYGIENE.md`](../formats/CODE-HYGIENE.md) Principle 6 and the bar in [`STYLE-comments.md`](../formats/STYLE-comments.md): delete WHAT-comments, obvious-from-signature docstrings, "used by X" caller references, commented-out code, banners, and in-function section headers (`// validate`, `// build response`); keep only why-comments the next reader would otherwise reattempt. Normalize any kept citation (`ADR-007 §7`, `R6 AC-3`, `v0.3 R1b2`) to [`STYLE-comments.md`](../formats/STYLE-comments.md) §3.
59
51
 
60
52
  ### 3. Efficiency — dead code, redundant work, premature defensive checks
61
53
 
@@ -99,7 +91,7 @@ In single-feature flow (no rounds), the sweep can land as a separate commit befo
99
91
  ## Pairing with other skills
100
92
 
101
93
  - **`tdd`** runs first. Simplify runs after green. Never simplify while red.
102
- - **`code-hygiene`** is the lens — its 5 principles (boring code, naming, YAGNI, rule of 3, locality) are what you apply during the sweep. Read it once; apply it many times.
94
+ - **[`code-hygiene`](../formats/CODE-HYGIENE.md)** is the lens — its seven principles (boring code, naming, YAGNI, rule of 3, locality, comments, constants placement) are what you apply during the sweep. Read it once; apply it many times.
103
95
  - **`pr-review`** comes after — a self-check against the diff. Some of the same lenses, applied as a reviewer rather than an author.
104
96
  - **`improve-codebase-architecture`** is the escalation — when simplify surfaces structural issues bigger than a sweep can fix.
105
97
 
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: system-design
3
3
  description: System-level architecture for greenfield work — name the modules, define responsibilities, set dependency direction, identify seams. Use when starting a new multi-module system or service from scratch, when defining topology before code lands, or when the user mentions "system architecture", "module boundaries", "service boundaries", "how should I structure this system", "draw the architecture", "topology". Skip for single-module work — use `design` instead. Skip for reorganizing an existing codebase — use `improve-codebase-architecture`. Pairs with `investigate` (comes before, surveying options) and `design` (comes after, shaping each module's interface).
4
- complexity: high
5
- expected_duration: 30 minutes
6
4
  ---
7
5
 
8
6
  # System Design
@@ -38,7 +36,7 @@ Before drawing anything, read what already exists:
38
36
  - `docs/adr/` — decisions already taken.
39
37
  - The feature set — what the system has to do.
40
38
 
41
- If `CONTEXT.md` doesn't exist yet, **resolve the core domain terms first** — defer to [`grill-plan` bootstrap mode](../grill-plan/BOOTSTRAP.md) (single source of truth for the lazy-creation rules). Module names without domain terms are placeholders.
39
+ If `CONTEXT.md` doesn't exist yet, **resolve the core domain terms first** — defer to [`grill-plan` bootstrap mode](../bootstrap/BOOTSTRAP.md) (single source of truth for the lazy-creation rules). Module names without domain terms are placeholders.
42
40
 
43
41
  ### 2. List the modules
44
42
 
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: tdd
3
3
  description: Test-driven development with the red-green-refactor loop. Use when implementing a feature, fixing a bug, changing core logic, or when the user mentions "TDD", "test-first", "red-green-refactor", or "integration tests". Skip for trivial UI glue, config changes, or pure docs edits.
4
- complexity: medium
5
- expected_duration: 20 minutes
6
4
  ---
7
5
 
8
6
  # Test-Driven Development
@@ -19,6 +17,11 @@ expected_duration: 20 minutes
19
17
  - Trivial getters / setters with no behavior.
20
18
  - Bug whose root cause isn't yet known — run [`debug`](../debug/SKILL.md) first; the reproduction crystallises into the failing test.
21
19
 
20
+ ## Pre-conditions
21
+
22
+ - **Current branch is not `main` / `master`.** If it is, stop and run `git checkout -b feat/<short-name>` (or `fix/...`) before writing the first test. Code lands on a feature branch; `main` receives merges, not commits.
23
+ - A feature doc (`docs/features/<short-name>.md`) exists with testable ACs — or a `debug` reproduction names the root cause.
24
+
22
25
  ## Philosophy
23
26
 
24
27
  Tests verify **behavior through public interfaces**, not implementation details. Code can change entirely; tests shouldn't.
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: tdd-rounds
3
3
  description: Multi-round TDD orchestration. Use when delivering a feature larger than one TDD slice — typically 5-15 acceptance criteria across multiple packages — by dispatching Builder sub-agents per round, with the parent maintaining state and verifying. Triggered when the user mentions "drive the sub-agent team", "multi-round TDD", "orchestrate rounds", "Builder agents", or when a plan from `feature-doc` lists more ACs than one agent should reasonably tackle in a single invocation. Pairs with `tdd` (Builders invoke that skill per round) and `prod-ready` (final round before tag).
4
- complexity: high
5
- expected_duration: 1 hour
6
4
  ---
7
5
 
8
6
  # Multi-Round TDD Orchestration
@@ -22,6 +20,7 @@ Distills the pattern of a parent agent driving Builder sub-agents through a feat
22
20
 
23
21
  ## The parent's contract
24
22
 
23
+ - **Dispatch on a feature branch, never `main`.** Verify the current branch before dispatching the first Builder; if it's `main` / `master`, create `feat/<short-name>` first. The whole multi-round delivery lives on one feature branch (or a stack of feature branches), merged to `main` only at the end.
25
24
  - **Plan once.** The plan file lists rounds, each round's ACs, the dependency order, and the skills cadence per round (which rounds need `design`; when to invoke `improve-codebase-architecture` mid-project; when to invoke `prod-ready`).
26
25
  - **Brief per round.** A self-contained brief — the Builder shouldn't need conversation history.
27
26
  - **Briefing Sub-agent**: For complex rounds, invoke a sub-agent to autonomously generate the brief by analyzing `docs/STATE.md`, the `feature-doc`, and the results of the previous round. See `templates/builder-brief.md` for the schema.
@@ -32,6 +31,7 @@ Distills the pattern of a parent agent driving Builder sub-agents through a feat
32
31
 
33
32
  When dispatched for a round, the Builder:
34
33
 
34
+ 0. **Pre-flight.** Verifies the current branch is **not** `main` / `master`. If it is, refuses immediately and returns a blocking report — does not proceed to step 1.
35
35
  1. Reads the brief, the plan file, `docs/STATE.md`, and any ADRs / feature docs the brief cites.
36
36
  2. **Executes the listed skills sequentially in this single invocation.** When a brief says "Skills (in order): design, tdd, simplify" — that means run all three in this run, not return to the parent between them. This rule is non-obvious; the brief template makes it explicit.
37
37
  3. Commits per AC slice (or per behavior slice for refactor rounds), prefix `R<N>:`. **Read [`COMMITS.md`](COMMITS.md) before the first commit** — it captures the seven rules (`R<N>:` prefix, `#<X>` for bug fixes, per-AC slicing, separate simplify-pass commit, separate doc commits, single-commit-with-justification, honest messages) and the message-body shape. The parent reads commits as the review surface; a clean sequence is reviewable one diff at a time, a mono-commit isn't.
@@ -94,16 +94,4 @@ When the final round completes:
94
94
  1. Run `verify-real-deps`. Capture surfaced bugs into `docs/known-issues.md`.
95
95
  2. Iterate fix-rounds until clean, or document deferrals to vN.1 with rationale.
96
96
  3. Tag and publish via whatever release / distribution channel applies.
97
- hape the Builder returns.
98
97
 
99
- ## Supporting docs
100
-
101
- - [`COMMITS.md`](COMMITS.md) — commit cadence and message style (per-AC slicing, `R<N>:` prefix, when single-commit is OK, honesty rule). Builders read this before the first commit.
102
-
103
- ## Handoff
104
-
105
- When the final round completes:
106
-
107
- 1. Run `verify-real-deps`. Capture surfaced bugs into `docs/known-issues.md`.
108
- 2. Iterate fix-rounds until clean, or document deferrals to vN.1 with rationale.
109
- 3. Tag and publish via whatever release / distribution channel applies.
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  name: verify-real-deps
3
3
  description: Pre-tag smoke test against real third-party APIs. Use after `prod-ready` is clean, before tagging vN.0 — the gate that catches wire-shape mismatches that fakes accept but real upstreams reject. Triggered when the user mentions "smoke test", "real API", "live verify", "before tag", or "end-to-end against actual <vendor>". Pairs with `prod-ready` (which catches ops/infra issues tests miss) and `tdd-rounds` (the orchestration that feeds into this gate).
4
- complexity: high
5
- expected_duration: 45 minutes
6
4
  ---
7
5
 
8
6
  # Verify Against Real Dependencies
@@ -1,3 +1,14 @@
1
+ ---
2
+ type: known-issues
3
+ title: "Known issues — post-vN.0 smoke test findings"
4
+ description: Bugs surfaced by the first end-to-end run against the real upstream.
5
+ tags: [smoke-test, known-issues]
6
+ timestamp: YYYY-MM-DD
7
+ ---
8
+
9
+ <!-- Frontmatter is OKF per skills/formats/OKF.md (`type: known-issues`).
10
+ `timestamp` tracks the last edit; the Discovered line below pins the first run. -->
11
+
1
12
  # Known issues — post-vN.0 smoke test findings
2
13
 
3
14
  **Discovered:** YYYY-MM-DD (first end-to-end run against real <upstream>).
@@ -2,8 +2,6 @@
2
2
  name: zoom-out
3
3
  description: User-invoked utility — pulls the agent up an abstraction layer when the user is lost in unfamiliar code. Produces a map of relevant modules, callers, and seams in `docs/CONTEXT.md` vocabulary. Use when the user says "I'm lost", "zoom out", "give me higher-level context", "I don't know this area", "what depends on what here", or invokes the slash command. Does not change which workflow the user is in — interrupts to orient, then hands back. Skip when the user already has the map and just needs to read code.
4
4
  disable-model-invocation: true
5
- complexity: low
6
- expected_duration: 5 minutes
7
5
  ---
8
6
 
9
7
  # Zoom Out