@sandrinio/vdoc 3.7.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +68 -12
- package/bin/vdoc.mjs +10 -0
- package/package.json +1 -1
- package/skills/agents/references/audit-workflow.md +41 -10
- package/skills/agents/references/create-workflow.md +77 -0
- package/skills/agents/references/discovery-protocol.md +211 -0
- package/skills/agents/references/doc-template.md +102 -32
- package/skills/agents/references/init-workflow.md +135 -27
- package/skills/agents/references/manifest-schema.json +8 -1
- package/skills/claude/references/audit-workflow.md +39 -10
- package/skills/claude/references/create-workflow.md +41 -18
- package/skills/claude/references/discovery-protocol.md +211 -0
- package/skills/claude/references/doc-template.md +102 -32
- package/skills/claude/references/init-workflow.md +131 -23
- package/skills/claude/references/manifest-schema.json +8 -1
- package/skills/cline/references/audit-workflow.md +41 -10
- package/skills/cline/references/create-workflow.md +77 -0
- package/skills/cline/references/discovery-protocol.md +211 -0
- package/skills/cline/references/doc-template.md +102 -32
- package/skills/cline/references/init-workflow.md +135 -27
- package/skills/cline/references/manifest-schema.json +8 -1
- package/skills/continue/references/audit-workflow.md +41 -10
- package/skills/continue/references/create-workflow.md +77 -0
- package/skills/continue/references/discovery-protocol.md +211 -0
- package/skills/continue/references/doc-template.md +102 -32
- package/skills/continue/references/init-workflow.md +135 -27
- package/skills/continue/references/manifest-schema.json +8 -1
- package/skills/cursor/references/audit-workflow.md +41 -10
- package/skills/cursor/references/create-workflow.md +77 -0
- package/skills/cursor/references/discovery-protocol.md +211 -0
- package/skills/cursor/references/doc-template.md +102 -32
- package/skills/cursor/references/init-workflow.md +135 -27
- package/skills/cursor/references/manifest-schema.json +8 -1
- package/skills/gemini/references/audit-workflow.md +41 -10
- package/skills/gemini/references/create-workflow.md +77 -0
- package/skills/gemini/references/discovery-protocol.md +211 -0
- package/skills/gemini/references/doc-template.md +102 -32
- package/skills/gemini/references/init-workflow.md +135 -27
- package/skills/gemini/references/manifest-schema.json +8 -1
- package/skills/jetbrains-ai/references/audit-workflow.md +41 -10
- package/skills/jetbrains-ai/references/create-workflow.md +77 -0
- package/skills/jetbrains-ai/references/discovery-protocol.md +211 -0
- package/skills/jetbrains-ai/references/doc-template.md +102 -32
- package/skills/jetbrains-ai/references/init-workflow.md +135 -27
- package/skills/jetbrains-ai/references/manifest-schema.json +8 -1
- package/skills/junie/references/audit-workflow.md +41 -10
- package/skills/junie/references/create-workflow.md +77 -0
- package/skills/junie/references/discovery-protocol.md +211 -0
- package/skills/junie/references/doc-template.md +102 -32
- package/skills/junie/references/init-workflow.md +135 -27
- package/skills/junie/references/manifest-schema.json +8 -1
- package/skills/vscode/references/audit-workflow.md +41 -10
- package/skills/vscode/references/create-workflow.md +77 -0
- package/skills/vscode/references/discovery-protocol.md +211 -0
- package/skills/vscode/references/doc-template.md +102 -32
- package/skills/vscode/references/init-workflow.md +133 -25
- package/skills/vscode/references/manifest-schema.json +8 -1
- package/skills/windsurf/resources/audit-workflow.md +41 -10
- package/skills/windsurf/resources/create-workflow.md +77 -0
- package/skills/windsurf/resources/discovery-protocol.md +211 -0
- package/skills/windsurf/resources/doc-template.md +102 -32
- package/skills/windsurf/resources/init-workflow.md +137 -29
- package/skills/windsurf/resources/manifest-schema.json +8 -1
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Universal Discovery Protocol
|
|
2
|
+
|
|
3
|
+
After running the archetype playbook from `exploration-strategies.md`, apply these four discovery layers to find **behaviors** — not just files. The archetype playbook tells you WHERE to look. This protocol tells you WHAT to look for.
|
|
4
|
+
|
|
5
|
+
Run all four layers regardless of archetype. Each layer produces signals that feed the documentation plan.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Layer 1 — Capability Surface
|
|
10
|
+
|
|
11
|
+
**Goal:** Map everything a user/consumer can DO.
|
|
12
|
+
|
|
13
|
+
The capability surface is the complete set of entry points into your system. Every entry point = a potential doc.
|
|
14
|
+
|
|
15
|
+
| Project Type | Capability Source | How to Find |
|
|
16
|
+
|-------------|------------------|-------------|
|
|
17
|
+
| SPA / Mobile | Route definitions | Glob: `**/routes*`, `**/router*`, `**/app/**/page.*`, `**/screens/**` |
|
|
18
|
+
| Web API | Endpoint definitions | Glob: `**/routes/**`, `**/controllers/**`; Grep: `@Get\|@Post\|app.get\|router.` |
|
|
19
|
+
| CLI | Command definitions | Glob: `**/commands/**`, `**/cmd/**`; Grep: `.command(\|.subcommand\|Subcommand` |
|
|
20
|
+
| Library/SDK | Public exports | Read main entry point (`index.*`), check `exports` in package config |
|
|
21
|
+
| Pipeline | DAG/flow definitions | Glob: `**/dags/**`, `**/pipelines/**`, `**/flows/**`, `**/workflows/**` |
|
|
22
|
+
| Event-driven | Event handlers | Grep: `on\(\|addEventListener\|@EventHandler\|subscribe\|consumer` |
|
|
23
|
+
|
|
24
|
+
### SPA-Specific: Route Tree = Feature Map
|
|
25
|
+
|
|
26
|
+
For SPAs (React, Angular, Vue, Svelte), the route tree IS the documentation outline:
|
|
27
|
+
|
|
28
|
+
1. **Extract the full route tree** — read router config, `app/` directory structure, or navigation definitions
|
|
29
|
+
2. **Classify each route:**
|
|
30
|
+
- **Core domain** — the primary value (e.g., `/projects/:id`, `/dashboard`)
|
|
31
|
+
- **Auth** — login, register, forgot password, OAuth callbacks
|
|
32
|
+
- **Settings/Admin** — configuration, user management
|
|
33
|
+
- **Utility** — 404, error pages, maintenance
|
|
34
|
+
3. **For each core domain route, identify:**
|
|
35
|
+
- What data it displays (state selectors, API calls, props)
|
|
36
|
+
- What actions the user can take (buttons, forms, modals)
|
|
37
|
+
- What happens after each action (navigation, API mutation, toast)
|
|
38
|
+
|
|
39
|
+
**Framework-specific best signals:**
|
|
40
|
+
|
|
41
|
+
| Framework | Best Feature Signal | Pattern to Grep |
|
|
42
|
+
|-----------|-------------------|-----------------|
|
|
43
|
+
| React | Custom hooks | `export function use[A-Z]` or `export const use[A-Z]` |
|
|
44
|
+
| Angular | Feature modules + services | `@NgModule\|@Injectable` |
|
|
45
|
+
| Vue 3 | Composables | `export function use[A-Z]` in `composables/` |
|
|
46
|
+
| Svelte | Stores + loaders | `writable\|readable\|derived` or `+page.ts` `load` functions |
|
|
47
|
+
| Solid | Signals + resources | `createSignal\|createResource` |
|
|
48
|
+
|
|
49
|
+
Each custom hook/composable/service that encapsulates a reusable behavior = one documentable feature.
|
|
50
|
+
|
|
51
|
+
### API-Specific: Endpoint Map
|
|
52
|
+
|
|
53
|
+
1. **Check for API specs first** — OpenAPI/Swagger (`swagger.json`, `openapi.yaml`), GraphQL schemas (`schema.graphql`, `*.gql`), protobuf definitions (`*.proto`), tRPC routers. These are free structured input — parse them instead of re-discovering.
|
|
54
|
+
2. **Group endpoints by resource** — `/users/*`, `/projects/*`, `/billing/*` — each group is a feature.
|
|
55
|
+
3. **Trace middleware chains** — what runs before each endpoint? (auth, validation, rate limiting, logging)
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Layer 2 — Data Flows
|
|
60
|
+
|
|
61
|
+
**Goal:** For each capability, trace how data moves from source to screen (or from input to storage).
|
|
62
|
+
|
|
63
|
+
### Discovery questions per feature:
|
|
64
|
+
1. **Where does the data come from?** (API call, local state, URL params, localStorage, real-time subscription)
|
|
65
|
+
2. **How is it transformed?** (selectors, computed values, mappers, formatters)
|
|
66
|
+
3. **Where is it displayed?** (which components/views consume it)
|
|
67
|
+
4. **How does the user modify it?** (forms, inline edits, drag-drop, toggles)
|
|
68
|
+
5. **Where does the mutation go?** (API endpoint, store dispatch, optimistic update)
|
|
69
|
+
6. **What's the loading/error/empty state?** (skeleton, spinner, error boundary, empty state message)
|
|
70
|
+
|
|
71
|
+
### Patterns to discover:
|
|
72
|
+
|
|
73
|
+
| Pattern | Grep Signal | What It Reveals |
|
|
74
|
+
|---------|------------|-----------------|
|
|
75
|
+
| API client calls | `fetch\|axios\|httpClient\|trpc\|useSWR\|useQuery\|graphql` | Backend dependencies per feature |
|
|
76
|
+
| State management | `useSelector\|useStore\|mapState\|inject\|useContext\|getState` | Shared state between features |
|
|
77
|
+
| Form handling | `useForm\|FormGroup\|Formik\|react-hook-form\|zod\|yup\|validate` | User input flows + validation rules |
|
|
78
|
+
| Caching | `cache\|staleTime\|revalidate\|TTL\|memo\|persist` | Data freshness strategy |
|
|
79
|
+
| Optimistic updates | `optimistic\|rollback\|onMutate\|pending` | UX patterns for mutations |
|
|
80
|
+
|
|
81
|
+
### SPA data flow trace template:
|
|
82
|
+
```
|
|
83
|
+
Feature: [name]
|
|
84
|
+
User action → Component → Hook/Service → API call → Backend endpoint
|
|
85
|
+
Response → Transform → State update → Re-render → User sees [result]
|
|
86
|
+
Error → Error handler → User sees [error state]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Layer 3 — Shared Behaviors
|
|
92
|
+
|
|
93
|
+
**Goal:** Find cross-cutting concerns that affect multiple features.
|
|
94
|
+
|
|
95
|
+
These don't belong to any single feature — they're system-wide patterns that deserve their own docs or dedicated sections.
|
|
96
|
+
|
|
97
|
+
### Must-find behaviors:
|
|
98
|
+
|
|
99
|
+
| Behavior | Where to Look | Grep Patterns |
|
|
100
|
+
|----------|--------------|---------------|
|
|
101
|
+
| **Authentication** | Middleware, guards, interceptors, context providers | `auth\|token\|session\|jwt\|oauth\|login\|guard\|protect\|interceptor` |
|
|
102
|
+
| **Authorization** | Route guards, role checks, permission gates | `role\|permission\|can\|ability\|policy\|rbac\|acl\|isAdmin\|gate` |
|
|
103
|
+
| **Error handling** | Error boundaries, global handlers, interceptors | `ErrorBoundary\|catch\|onError\|handleError\|errorHandler\|fallback\|retry` |
|
|
104
|
+
| **Notifications** | Toast systems, push notifications, in-app alerts | `toast\|notify\|alert\|snackbar\|notification\|push\|banner` |
|
|
105
|
+
| **Real-time** | WebSocket, SSE, polling, subscriptions | `WebSocket\|socket\|SSE\|EventSource\|subscribe\|polling\|realtime\|live` |
|
|
106
|
+
| **Theming/i18n** | Theme providers, translation files, locale configs | `theme\|dark\|light\|i18n\|locale\|translate\|intl\|t\(` |
|
|
107
|
+
| **Analytics** | Tracking calls, event logging | `track\|analytics\|gtag\|mixpanel\|segment\|posthog\|amplitude` |
|
|
108
|
+
| **Feature flags** | Flag checks, A/B tests, experimental UI | `feature.*flag\|experiment\|variant\|canary\|flipper\|unleash\|launchDarkly` |
|
|
109
|
+
|
|
110
|
+
### Discovery process:
|
|
111
|
+
1. Grep for each behavior's patterns across the codebase
|
|
112
|
+
2. If found, read the implementation to understand scope
|
|
113
|
+
3. In the exploration log, note which features are affected
|
|
114
|
+
4. In the plan, decide: standalone doc vs dedicated section in each affected feature doc
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Layer 4 — Integration Boundary
|
|
119
|
+
|
|
120
|
+
**Goal:** Find every point where the system touches the outside world.
|
|
121
|
+
|
|
122
|
+
### Outgoing integrations (your app calls external services):
|
|
123
|
+
|
|
124
|
+
| Pattern | How to Find |
|
|
125
|
+
|---------|------------|
|
|
126
|
+
| HTTP clients | Grep: `fetch\|axios\|got\|httpClient\|request\|urllib` — read the base URL and endpoint |
|
|
127
|
+
| SDK imports | Grep: `import.*from ['"]@?(?:aws-sdk\|stripe\|twilio\|sendgrid\|firebase\|supabase)` |
|
|
128
|
+
| Database connections | Grep: `createClient\|createPool\|mongoose.connect\|PrismaClient\|createConnection` |
|
|
129
|
+
| Cache connections | Grep: `redis\|memcache\|createClient.*cache` |
|
|
130
|
+
| Queue producers | Grep: `publish\|sendMessage\|enqueue\|dispatch.*queue\|produce` |
|
|
131
|
+
|
|
132
|
+
### Incoming integrations (external services call your app):
|
|
133
|
+
|
|
134
|
+
| Pattern | How to Find |
|
|
135
|
+
|---------|------------|
|
|
136
|
+
| Webhook handlers | Grep: `webhook\|/hook\|/callback` in route definitions |
|
|
137
|
+
| OAuth callbacks | Grep: `callback\|/auth/.*callback\|redirect_uri` |
|
|
138
|
+
| Queue consumers | Grep: `consume\|subscribe\|onMessage\|process.*queue\|worker` |
|
|
139
|
+
| Cron / scheduled tasks | Grep: `cron\|schedule\|@Cron\|setInterval.*60\|recurring`; Glob: `**/cron/**`, `**/jobs/**`, `**/tasks/**`, `**/workers/**` |
|
|
140
|
+
|
|
141
|
+
### Hidden work (no user present):
|
|
142
|
+
|
|
143
|
+
This is the most underdocumented layer in any project. Actively hunt for:
|
|
144
|
+
|
|
145
|
+
1. **Background jobs** — Glob: `**/jobs/**`, `**/workers/**`, `**/queues/**`, `**/tasks/**`
|
|
146
|
+
2. **Scheduled tasks** — Grep: `cron\|schedule\|@Scheduled\|setInterval`; check CI/CD configs for scheduled workflows
|
|
147
|
+
3. **Event handlers** — Grep: `on\(\|emit\(\|EventEmitter\|addEventListener\|subscribe`; check for pub/sub patterns
|
|
148
|
+
4. **Database triggers** — Read migration files for trigger definitions
|
|
149
|
+
5. **Cleanup / maintenance** — Grep: `cleanup\|purge\|archive\|expire\|gc\|garbage`
|
|
150
|
+
|
|
151
|
+
### Environment as documentation:
|
|
152
|
+
|
|
153
|
+
Read `.env.example`, `.env.sample`, or environment config files. Each env var is a configuration surface:
|
|
154
|
+
- `DATABASE_URL` → database dependency
|
|
155
|
+
- `STRIPE_SECRET_KEY` → payment integration
|
|
156
|
+
- `REDIS_URL` → caching layer
|
|
157
|
+
- `WEBHOOK_SECRET` → incoming integration
|
|
158
|
+
|
|
159
|
+
Group env vars by feature — they reveal the integration map without reading any code.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## How to Use This Protocol
|
|
164
|
+
|
|
165
|
+
### During Init (Step 1 — Explore):
|
|
166
|
+
|
|
167
|
+
After the archetype playbook:
|
|
168
|
+
1. Run Layer 1 to build the capability map
|
|
169
|
+
2. For each capability, run Layer 2 to trace data flows
|
|
170
|
+
3. Run Layer 3 once for the whole project to find shared behaviors
|
|
171
|
+
4. Run Layer 4 once to map the integration boundary
|
|
172
|
+
|
|
173
|
+
### During Audit:
|
|
174
|
+
|
|
175
|
+
Layers 1 and 4 are the best sources for coverage gaps:
|
|
176
|
+
- New routes/endpoints = new capabilities not yet documented
|
|
177
|
+
- New env vars with external URLs = new integrations not yet documented
|
|
178
|
+
- New cron/job files = new background work not yet documented
|
|
179
|
+
|
|
180
|
+
### In the Exploration Log:
|
|
181
|
+
|
|
182
|
+
Add a section per layer:
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
## Capability Surface
|
|
186
|
+
| Entry Point | Type | Proposed Doc |
|
|
187
|
+
|-------------|------|-------------|
|
|
188
|
+
| /api/auth/* | Auth routes (5 endpoints) | AUTHENTICATION_DOC.md |
|
|
189
|
+
| /dashboard | Page + 3 sub-routes | DASHBOARD_DOC.md |
|
|
190
|
+
|
|
191
|
+
## Data Flows
|
|
192
|
+
| Feature | State Source | API Calls | Mutations |
|
|
193
|
+
|---------|-------------|-----------|-----------|
|
|
194
|
+
| Dashboard | useDashboardStore | GET /api/stats, GET /api/projects | None (read-only) |
|
|
195
|
+
| Project Editor | useProjectStore | GET /api/projects/:id | PUT /api/projects/:id, POST /api/tasks |
|
|
196
|
+
|
|
197
|
+
## Shared Behaviors
|
|
198
|
+
| Behavior | Scope | Implementation |
|
|
199
|
+
|----------|-------|----------------|
|
|
200
|
+
| Auth | All /app/* routes | NextAuth middleware + useSession hook |
|
|
201
|
+
| Error handling | Global | ErrorBoundary + toast on API errors |
|
|
202
|
+
| Feature flags | 3 features | LaunchDarkly SDK, checked in useFeatureFlag hook |
|
|
203
|
+
|
|
204
|
+
## Integration Boundary
|
|
205
|
+
| Direction | System | Purpose | Env Var |
|
|
206
|
+
|-----------|--------|---------|---------|
|
|
207
|
+
| Outgoing | Stripe API | Payments | STRIPE_SECRET_KEY |
|
|
208
|
+
| Outgoing | SendGrid | Emails | SENDGRID_API_KEY |
|
|
209
|
+
| Incoming | Stripe webhooks | Payment events | /api/webhooks/stripe |
|
|
210
|
+
| Background | Cron: cleanup-sessions | Expire old sessions | runs daily via Vercel Cron |
|
|
211
|
+
```
|
|
@@ -1,92 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "{Feature Title}"
|
|
3
|
+
description: "{One-line description of what this covers}"
|
|
4
|
+
tags: ["{domain}", "{capability}"]
|
|
5
|
+
version: 1
|
|
6
|
+
keyFiles: ["{src/path/main-file.ts}"]
|
|
7
|
+
relatedDocs: []
|
|
8
|
+
lastUpdated: "{YYYY-MM-DD}"
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# {Feature Title}
|
|
2
12
|
|
|
3
|
-
> {One-line description
|
|
13
|
+
> {One-line description — same as frontmatter description}
|
|
14
|
+
|
|
15
|
+
<!-- TEMPLATE GUIDANCE
|
|
16
|
+
Sections marked [CORE] — always include.
|
|
17
|
+
Sections marked [CONDITIONAL] — include only when relevant, omit entirely otherwise.
|
|
18
|
+
Do NOT leave empty sections or write "N/A".
|
|
19
|
+
-->
|
|
4
20
|
|
|
5
21
|
---
|
|
6
22
|
|
|
7
23
|
## Overview
|
|
24
|
+
<!-- [CORE] -->
|
|
25
|
+
|
|
26
|
+
{What it does, why it exists, and who it's for. Lead with the user value — what problem does this solve? Then explain how it fits in the broader system. A PM should be able to read this section alone and understand the feature.}
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Business Rules
|
|
31
|
+
<!-- [CORE] -->
|
|
32
|
+
|
|
33
|
+
{Plain-language rules that govern this feature's behavior. No code, no implementation details — just the "what" and "why" a PM or stakeholder needs to know.}
|
|
34
|
+
|
|
35
|
+
- {Rule}: {Description}
|
|
8
36
|
|
|
9
|
-
|
|
37
|
+
<!-- Examples:
|
|
38
|
+
- **Trial limit**: Free users get 3 projects. Creating a 4th triggers the upgrade prompt.
|
|
39
|
+
- **Auto-archive**: Inactive workspaces are archived after 90 days. Owners get email warnings at 60 and 80 days.
|
|
40
|
+
- **Rate limiting**: API consumers are capped at 100 req/min per API key. Exceeding returns 429.
|
|
41
|
+
-->
|
|
10
42
|
|
|
11
43
|
---
|
|
12
44
|
|
|
13
45
|
## User Workflows
|
|
46
|
+
<!-- [CONDITIONAL: include for user-facing features] -->
|
|
14
47
|
|
|
15
|
-
{Step-by-step journeys for the 1-3 primary user actions.
|
|
48
|
+
{Step-by-step journeys for the 1-3 primary user actions.}
|
|
16
49
|
|
|
17
50
|
1. **{Workflow Name}**
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **Result:** {What the user sees}
|
|
51
|
+
- **Trigger:** {What the user does}
|
|
52
|
+
- **Steps:** {What happens — keep it sequential}
|
|
53
|
+
- **Result:** {What the user sees or gets}
|
|
21
54
|
|
|
22
55
|
---
|
|
23
56
|
|
|
24
57
|
## How It Works
|
|
58
|
+
<!-- [CORE] -->
|
|
25
59
|
|
|
26
|
-
{Trace at least one complete request from
|
|
60
|
+
{Trace at least one complete request from trigger to final effect. Show the full path through every service, database call, and external system. Don't skip intermediaries.}
|
|
27
61
|
|
|
28
62
|
{Use a sequence diagram for the primary flow — show all actors. Use flowcharts for branching logic only. Max 7-9 nodes per diagram, split into multiple if larger.}
|
|
29
63
|
|
|
30
64
|
---
|
|
31
65
|
|
|
32
|
-
##
|
|
66
|
+
## Key Files
|
|
33
67
|
|
|
34
|
-
|
|
68
|
+
<!-- [CORE] -->
|
|
35
69
|
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
| `
|
|
70
|
+
| File | Type | Purpose |
|
|
71
|
+
|------|------|---------|
|
|
72
|
+
| `src/path/file.ts` | Source | {What this file does} |
|
|
73
|
+
| `src/path/file.test.ts` | Test | {What it validates} |
|
|
74
|
+
| `.env` / `config.ts` | Config | {What it controls} |
|
|
39
75
|
|
|
40
|
-
|
|
76
|
+
<!-- Type = Source, Test, Config, Migration, Script, Route, Hook, Store, Template, etc. -->
|
|
41
77
|
|
|
42
78
|
---
|
|
43
79
|
|
|
44
|
-
##
|
|
80
|
+
## Testing
|
|
81
|
+
<!-- [CORE] -->
|
|
45
82
|
|
|
46
|
-
|
|
47
|
-
|------|---------|
|
|
48
|
-
| `src/path/file.ts` | What this file does |
|
|
83
|
+
**Run:** `{test command — e.g. npm test -- --grep "feature-name"}`
|
|
49
84
|
|
|
50
|
-
|
|
85
|
+
| What | Location | Notes |
|
|
86
|
+
|------|----------|-------|
|
|
87
|
+
| Unit tests | `{path}` | {What's covered} |
|
|
88
|
+
| Integration tests | `{path}` | {What's covered} |
|
|
89
|
+
| E2E tests | `{path}` | {What's covered} |
|
|
51
90
|
|
|
52
|
-
|
|
91
|
+
**Coverage gaps:** {What is NOT tested and why — honest assessment. "None" if fully covered.}
|
|
53
92
|
|
|
54
|
-
{
|
|
93
|
+
**Manual testing:** {Steps for anything that requires manual verification, or "Fully automated" if none.}
|
|
55
94
|
|
|
56
95
|
---
|
|
57
96
|
|
|
58
|
-
##
|
|
97
|
+
## Common Tasks
|
|
98
|
+
<!-- [CONDITIONAL: include when feature has recurring modification patterns] -->
|
|
59
99
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
100
|
+
{Cookbook-style recipes for the things developers actually do with this feature. Each recipe should be copy-paste actionable.}
|
|
101
|
+
|
|
102
|
+
### {Task name — e.g. "Add a new payment method"}
|
|
103
|
+
1. {Step}
|
|
104
|
+
2. {Step}
|
|
105
|
+
3. {Step}
|
|
106
|
+
|
|
107
|
+
<!-- Keep recipes short (3-6 steps). If a task needs more, it's probably a workflow, not a recipe. -->
|
|
63
108
|
|
|
64
109
|
---
|
|
65
110
|
|
|
66
|
-
##
|
|
111
|
+
## Data Model
|
|
112
|
+
<!-- [CONDITIONAL: include when feature owns database tables or persistent state] -->
|
|
67
113
|
|
|
68
|
-
{
|
|
114
|
+
{Primary tables/collections this feature owns.}
|
|
69
115
|
|
|
70
|
-
|
|
116
|
+
| Column | Type | Description |
|
|
117
|
+
|--------|------|-------------|
|
|
118
|
+
| `column_name` | `type` | What it stores |
|
|
119
|
+
|
|
120
|
+
{Mermaid ER diagram for relationships between tables.}
|
|
71
121
|
|
|
72
122
|
---
|
|
73
123
|
|
|
74
|
-
##
|
|
124
|
+
## Dependencies & Integrations
|
|
125
|
+
<!-- [CONDITIONAL: include when feature depends on external services or other features] -->
|
|
75
126
|
|
|
76
|
-
|
|
127
|
+
| Dependency | Type | What breaks if it's down |
|
|
128
|
+
|------------|------|--------------------------|
|
|
129
|
+
| `{service/package/feature}` | External / Internal | {Impact} |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Error Handling & Edge Cases
|
|
134
|
+
<!-- [CONDITIONAL: include when feature has non-obvious failure modes] -->
|
|
135
|
+
|
|
136
|
+
- **{Scenario}** — {What triggers it}. User sees: {what}. System does: {recovery/logging}.
|
|
77
137
|
|
|
78
138
|
---
|
|
79
139
|
|
|
80
140
|
## Constraints & Decisions
|
|
141
|
+
<!-- [CORE] -->
|
|
81
142
|
|
|
82
|
-
{Why it's built this way. What you CANNOT change without breaking things.}
|
|
143
|
+
{Why it's built this way. What you CANNOT change without breaking things. Include security considerations here — auth patterns, access control, secrets — when relevant.}
|
|
144
|
+
|
|
145
|
+
- **{Decision}**: {What was decided and why. What alternative was rejected.}
|
|
83
146
|
|
|
84
147
|
---
|
|
85
148
|
|
|
86
149
|
## Related Features
|
|
150
|
+
<!-- [CORE] -->
|
|
87
151
|
|
|
88
|
-
|
|
152
|
+
| Doc | Relationship | Blast radius |
|
|
153
|
+
|-----|-------------|--------------|
|
|
154
|
+
| `{filename.md}` | {depends on / depended by / shares data with} | {What breaks if this feature changes} |
|
|
89
155
|
|
|
90
156
|
---
|
|
91
157
|
|
|
92
|
-
|
|
158
|
+
## Change Log
|
|
159
|
+
|
|
160
|
+
| Date | Change | By |
|
|
161
|
+
|------|--------|-----|
|
|
162
|
+
| {YYYY-MM-DD} | Initial documentation | vdoc |
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Follow the two-phase exploration strategy in `references/exploration-strategies.md`:
|
|
6
6
|
|
|
7
7
|
**Phase 1 — Fingerprint** (3-5 file reads max)
|
|
8
|
-
Read package/config files and directory structure to identify the project's language, framework, and archetype. Also check for existing documentation (`vdocs/`, `docs/`, `product_documentation/`, substantial `*.md` files). If found, read them first — they're a head start. See the "Existing Documentation" section in `references/exploration-strategies.md`.
|
|
8
|
+
Read package/config files and directory structure using Read, Glob, and Grep to identify the project's language, framework, and archetype. Also check for existing documentation (`vdocs/`, `docs/`, `product_documentation/`, substantial `*.md` files). If found, read them first — they're a head start. See the "Existing Documentation" section in `references/exploration-strategies.md`.
|
|
9
9
|
|
|
10
10
|
**Phase 2 — Targeted Exploration** (archetype-specific)
|
|
11
11
|
Apply the matching archetype playbook from `references/exploration-strategies.md`. Read files in priority order using the glob patterns listed. Identify feature signals — each signal maps to a documentable feature. Combine multiple playbooks when the project doesn't fit a single archetype (see "Composing Archetypes" in the strategies file).
|
|
@@ -14,10 +14,19 @@ If no archetype matches, use the Fallback strategy and confirm with the user.
|
|
|
14
14
|
|
|
15
15
|
Do not skim. Understand how the system actually works before proposing docs.
|
|
16
16
|
|
|
17
|
-
**
|
|
17
|
+
**Phase 2b — Behavior Discovery** (universal — runs after archetype playbook)
|
|
18
|
+
Apply the 4-layer discovery protocol from `references/discovery-protocol.md`:
|
|
19
|
+
1. **Capability Surface** — Map every entry point (routes, endpoints, commands, exports)
|
|
20
|
+
2. **Data Flows** — For each capability, trace data from source to screen to mutation
|
|
21
|
+
3. **Shared Behaviors** — Find cross-cutting concerns (auth, error handling, notifications, feature flags)
|
|
22
|
+
4. **Integration Boundary** — Map every external touchpoint (outgoing API calls, incoming webhooks, background jobs, env vars)
|
|
23
|
+
|
|
24
|
+
This catches behaviors that file-structure exploration misses: background jobs, event-driven workflows, hidden integrations, cross-feature dependencies.
|
|
25
|
+
|
|
26
|
+
**Important:** Use your built-in tools (Read, Glob, Grep) to explore. Do NOT create scanner scripts, shell scripts, or any tooling. vdoc is purely AI-driven — no scripts, no build steps, no infrastructure.
|
|
18
27
|
|
|
19
28
|
**Phase 3 — Write Exploration Log**
|
|
20
|
-
After exploring, write `vdocs/_exploration_log.md` documenting what you found:
|
|
29
|
+
After exploring, write `vdocs/_planning/_exploration_log.md` documenting what you found:
|
|
21
30
|
|
|
22
31
|
```markdown
|
|
23
32
|
# Exploration Log
|
|
@@ -42,6 +51,38 @@ After exploring, write `vdocs/_exploration_log.md` documenting what you found:
|
|
|
42
51
|
| Prisma schema with 8 models | prisma/schema.prisma | DATA_MODEL_DOC.md |
|
|
43
52
|
| ... | ... | ... |
|
|
44
53
|
|
|
54
|
+
## Capability Surface
|
|
55
|
+
| Entry Point | Type | Proposed Doc |
|
|
56
|
+
|-------------|------|--------------|
|
|
57
|
+
| /api/auth/* | Auth routes (5 endpoints) | AUTHENTICATION_DOC.md |
|
|
58
|
+
| /dashboard | Page + 3 sub-routes | DASHBOARD_DOC.md |
|
|
59
|
+
|
|
60
|
+
## Data Flows
|
|
61
|
+
| Feature | State Source | API Calls | Mutations |
|
|
62
|
+
|---------|-------------|-----------|----------|
|
|
63
|
+
| Dashboard | useDashboardStore | GET /api/stats | None (read-only) |
|
|
64
|
+
|
|
65
|
+
## Shared Behaviors
|
|
66
|
+
| Behavior | Scope | Implementation |
|
|
67
|
+
|----------|-------|----------------|
|
|
68
|
+
| Auth | All /app/* routes | NextAuth middleware + useSession hook |
|
|
69
|
+
|
|
70
|
+
## Integration Boundary
|
|
71
|
+
| Direction | System | Purpose | Env Var |
|
|
72
|
+
|-----------|--------|---------|--------|
|
|
73
|
+
| Outgoing | Stripe API | Payments | STRIPE_SECRET_KEY |
|
|
74
|
+
| Incoming | Stripe webhooks | Payment events | /api/webhooks/stripe |
|
|
75
|
+
| Background | Cron: cleanup-sessions | Expire old sessions | Vercel Cron |
|
|
76
|
+
|
|
77
|
+
## Cross-Feature Dependencies
|
|
78
|
+
After identifying all feature signals, grep for imports/references between features to map which features consume each other's data, types, or APIs. This prevents missing secondary workflows during doc generation.
|
|
79
|
+
|
|
80
|
+
| Feature A | Feature B | Connection | Impact |
|
|
81
|
+
|-----------|-----------|------------|--------|
|
|
82
|
+
| Azure DevOps Integration | Google Sheets Export | Sheets exports work items fetched by Azure module | Azure doc must cover the export workflow |
|
|
83
|
+
| Auth (NextAuth) | All API routes | Every route uses auth middleware | Auth doc must list all protected routes |
|
|
84
|
+
| ... | ... | ... | ... |
|
|
85
|
+
|
|
45
86
|
## Ambiguities / Open Questions
|
|
46
87
|
- Could not determine why Redis is in dependencies — no usage found. Ask user.
|
|
47
88
|
- Payments folder exists but appears incomplete / WIP.
|
|
@@ -51,13 +92,19 @@ This log is your working memory. It feeds directly into Step 2 (Plan).
|
|
|
51
92
|
|
|
52
93
|
## Step 2 — Plan
|
|
53
94
|
|
|
54
|
-
Write `vdocs/_DOCUMENTATION_PLAN.md` to disk AND present it to the user in the same step. The file must be persisted — do not just show it in chat.
|
|
95
|
+
Write `vdocs/_planning/_DOCUMENTATION_PLAN.md` to disk AND present it to the user in the same step. The file must be persisted — do not just show it in chat.
|
|
55
96
|
|
|
56
97
|
Use this format:
|
|
57
98
|
|
|
58
99
|
```markdown
|
|
59
100
|
# Documentation Plan
|
|
60
101
|
|
|
102
|
+
## Fingerprint
|
|
103
|
+
- **Language(s):** e.g., TypeScript, Python
|
|
104
|
+
- **Framework(s):** e.g., Next.js 14, FastAPI
|
|
105
|
+
- **Archetype(s):** e.g., Full-stack Framework
|
|
106
|
+
- **Scope:** e.g., ~85 files, medium
|
|
107
|
+
|
|
61
108
|
## Proposed Documents
|
|
62
109
|
|
|
63
110
|
1. **PROJECT_OVERVIEW_DOC.md** — Tech stack, architecture, project structure, dev setup
|
|
@@ -79,7 +126,7 @@ Wait for user approval before proceeding.
|
|
|
79
126
|
|
|
80
127
|
## Step 3 — Generate
|
|
81
128
|
|
|
82
|
-
Read the template from
|
|
129
|
+
Read the template from [doc-template.md](./doc-template.md) once before starting.
|
|
83
130
|
|
|
84
131
|
Then generate docs **one at a time, sequentially**. For each approved doc:
|
|
85
132
|
|
|
@@ -93,46 +140,107 @@ Do NOT attempt to generate multiple docs from memory. Each doc is a fresh cycle:
|
|
|
93
140
|
|
|
94
141
|
**Writing rules:**
|
|
95
142
|
|
|
96
|
-
- **
|
|
97
|
-
- **
|
|
143
|
+
- **YAML frontmatter** — every doc MUST start with frontmatter: `title`, `description`, `tags`, `version` (start at 1), `keyFiles` (array of primary source file paths), `relatedDocs` (array of other doc filenames), `lastUpdated` (YYYY-MM-DD). This metadata is the machine-readable contract — keep it in sync with the doc body.
|
|
144
|
+
- **CORE vs CONDITIONAL sections** — follow the `[CORE]` and `[CONDITIONAL]` markers in the template. Omit conditional sections entirely when not relevant. Do NOT leave empty sections or write "N/A".
|
|
145
|
+
- **Overview** must open with the value proposition — what problem does this feature solve for the user? Not just "manages X" but "enables users to Y without Z." A PM should understand the feature from this section alone.
|
|
146
|
+
- **Business Rules** — plain-language rules that govern behavior. No code. "Free users get 3 projects", "Sessions expire after 30 min of inactivity", "Rate limit: 100 req/min per API key." If you can't find explicit rules, derive them from the code and mark with `Inferred from code — verify with team`.
|
|
147
|
+
- **User Workflows** — describe 1-3 primary user journeys step by step: what the user does, what the system does, what the user sees. This grounds the doc in product reality. [CONDITIONAL: omit for non-user-facing features like background jobs]
|
|
98
148
|
- **"How It Works" must use sequence diagrams** for the primary flow — show every actor (user, frontend, API, service, database, external systems). Flowcharts are for branching logic only. Trace the COMPLETE path — if there's a cron job that calls an executor that calls an external API, show all three, not just "cron → external API."
|
|
99
|
-
- **
|
|
100
|
-
- **
|
|
101
|
-
- **
|
|
102
|
-
- **
|
|
103
|
-
- **
|
|
104
|
-
- **
|
|
105
|
-
- **
|
|
149
|
+
- **Key Files** — list every file in the execution path with a Type column (Source, Test, Config, Migration, Script, Route, Hook, Store). Include test files and config files, not just source. If a cron handler, executor, service, and DB helper are all involved, list all of them.
|
|
150
|
+
- **Testing** — include the test run command, test file locations, what's covered, coverage gaps (honest assessment), and manual testing steps. This is critical for AI coders and onboarding developers.
|
|
151
|
+
- **Common Tasks** — cookbook-style recipes for recurring modifications: "To add a new payment method, do X, Y, Z." [CONDITIONAL: omit for features with no recurring modification patterns]
|
|
152
|
+
- **Data Model** must show actual column names, types, and descriptions for primary tables — not just entity names in an ER diagram. Read the actual schema/types files. [CONDITIONAL: omit for features without persistent state]
|
|
153
|
+
- **Error Handling & Edge Cases** — list specific failure scenarios: "If the user's OAuth token expires, the system does X. The user sees Y." Not generic "errors are logged." Think: what breaks at 2 AM with no user present? [CONDITIONAL: omit for features with no non-obvious failure modes]
|
|
154
|
+
- **Constraints & Decisions** is the most valuable section. Dig into the code for non-obvious choices: "Uses polling instead of websockets because...", "Auth tokens expire in 15min because...". Include security considerations here — auth patterns, access control, secrets. If you can't find the reason, state the constraint and mark it: `Reason: unknown — verify with team`.
|
|
155
|
+
- **Related Features** — structured table with Doc, Relationship (depends on / depended by / shares data with), and Blast radius columns. Reference other docs by filename. Also populate the `relatedDocs` frontmatter array with the same filenames.
|
|
156
|
+
- **Change Log** — add initial entry with today's date and "Initial documentation".
|
|
106
157
|
|
|
107
158
|
## Step 4 — Manifest
|
|
108
159
|
|
|
109
|
-
Create `vdocs/_manifest.json` using the schema in
|
|
160
|
+
Create `vdocs/_manifest.json` using the schema in [manifest-schema.json](./manifest-schema.json).
|
|
161
|
+
|
|
162
|
+
**Transfer the Fingerprint** from the exploration log into the manifest's top-level `fingerprint` object. This preserves the project identity metadata alongside the documentation inventory.
|
|
110
163
|
|
|
111
164
|
The `description` field is critical — write it rich enough that you can route any user question to the right doc by matching against descriptions. Include specific technology names, patterns, and concepts.
|
|
112
165
|
|
|
166
|
+
The `deps` field lists feature names (matching other entries' titles) that would break or behave differently if this feature changes. Populate from the Related Features table's "depends on" and "depended by" relationships. This enables blast radius analysis by downstream consumers.
|
|
167
|
+
|
|
113
168
|
Example:
|
|
114
169
|
|
|
115
170
|
```json
|
|
116
171
|
{
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
172
|
+
"project": "my-project",
|
|
173
|
+
"fingerprint": {
|
|
174
|
+
"languages": ["TypeScript"],
|
|
175
|
+
"frameworks": ["Next.js 14", "Prisma", "NextAuth"],
|
|
176
|
+
"archetypes": ["Full-stack Framework"],
|
|
177
|
+
"scope": "~85 files, medium"
|
|
178
|
+
},
|
|
179
|
+
"documentation": [
|
|
180
|
+
{
|
|
181
|
+
"filepath": "AUTHENTICATION_DOC.md",
|
|
182
|
+
"title": "Authentication - OAuth2 & JWT",
|
|
183
|
+
"version": "1.0.0",
|
|
184
|
+
"description": "OAuth2 flow with Google/GitHub providers, JWT token lifecycle, session management via NextAuth.js, route protection middleware, and role-based access control.",
|
|
185
|
+
"tags": ["oauth2", "jwt", "session-management", "rbac"],
|
|
186
|
+
"deps": ["user-profile", "billing", "api-reference"]
|
|
187
|
+
}
|
|
188
|
+
]
|
|
122
189
|
}
|
|
123
190
|
```
|
|
124
191
|
|
|
125
|
-
## Step 5 —
|
|
192
|
+
## Step 5 — Generate Context Slices
|
|
193
|
+
|
|
194
|
+
For each generated doc, create a token-optimized context slice at `vdocs/_slices/{FEATURE_NAME}_SLICE.md`.
|
|
195
|
+
|
|
196
|
+
A context slice contains ONLY these sections extracted from the full doc:
|
|
197
|
+
- **Overview** (first paragraph only)
|
|
198
|
+
- **Business Rules** (full section)
|
|
199
|
+
- **Key Files** table (full table)
|
|
200
|
+
- **Constraints & Decisions** (full section)
|
|
201
|
+
- **Related Features** table (full table)
|
|
202
|
+
|
|
203
|
+
Format:
|
|
204
|
+
|
|
205
|
+
```markdown
|
|
206
|
+
<!-- Context slice for {Feature Title} — auto-generated, do not edit manually -->
|
|
207
|
+
<!-- Full doc: vdocs/{FEATURE_NAME_DOC}.md -->
|
|
208
|
+
|
|
209
|
+
# {Feature Title}
|
|
210
|
+
|
|
211
|
+
{First paragraph of Overview}
|
|
212
|
+
|
|
213
|
+
## Business Rules
|
|
214
|
+
{Full Business Rules section}
|
|
215
|
+
|
|
216
|
+
## Key Files
|
|
217
|
+
{Full Key Files table}
|
|
218
|
+
|
|
219
|
+
## Constraints & Decisions
|
|
220
|
+
{Full Constraints & Decisions section}
|
|
221
|
+
|
|
222
|
+
## Related Features
|
|
223
|
+
{Full Related Features table}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
These slices are designed for AI agent consumption — compact enough to include in context packs without exceeding token budgets. They auto-regenerate whenever the parent doc is created or updated.
|
|
227
|
+
|
|
228
|
+
## Step 6 — Self-Review
|
|
126
229
|
|
|
127
230
|
Before finishing, verify:
|
|
128
231
|
|
|
232
|
+
- [ ] Every doc has valid YAML frontmatter (title, description, tags, version, keyFiles, relatedDocs, lastUpdated)
|
|
233
|
+
- [ ] Frontmatter `keyFiles` matches the Key Files table entries
|
|
234
|
+
- [ ] Frontmatter `relatedDocs` matches the Related Features table doc filenames
|
|
129
235
|
- [ ] Every doc has at least one mermaid diagram in "How It Works"
|
|
130
236
|
- [ ] Every doc has at least 2 entries in "Constraints & Decisions"
|
|
131
|
-
- [ ] Every doc's
|
|
132
|
-
- [ ] Every doc
|
|
133
|
-
- [ ] Every doc's
|
|
237
|
+
- [ ] Every doc's Key Files lists real paths that exist in the codebase (include Type column)
|
|
238
|
+
- [ ] Every doc has a Testing section with run command and coverage info
|
|
239
|
+
- [ ] Every doc's Related Features uses the structured table format (Doc, Relationship, Blast radius)
|
|
240
|
+
- [ ] Manifest entries include `deps` arrays populated from Related Features
|
|
134
241
|
- [ ] Manifest `description` is detailed enough for semantic routing
|
|
135
242
|
- [ ] No doc is just a shallow restatement of file names — each explains WHY and HOW
|
|
136
|
-
- [ ] Every doc has "
|
|
137
|
-
- [ ]
|
|
138
|
-
- [ ]
|
|
243
|
+
- [ ] Every doc has "Business Rules" with at least one plain-language rule
|
|
244
|
+
- [ ] CONDITIONAL sections are omitted (not left empty) when not relevant
|
|
245
|
+
- [ ] Context slices exist in `vdocs/_slices/` for every generated doc
|
|
246
|
+
- [ ] Planning artifacts are in `vdocs/_planning/` (exploration log, doc plan)
|