@tidyfactor/doc 1.3.0 → 1.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/.tidyfactor +3 -3
- package/CHANGELOG.md +103 -4
- package/README.ar.md +34 -8
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fa.md +1 -1
- package/README.fr.md +1 -1
- package/README.md +34 -8
- package/README.pt.md +1 -1
- package/README.zh.md +1 -1
- package/SKILL.md +28 -5
- package/bin/add-skill.js +44 -6
- package/brand.json +1 -1
- package/brand.yaml +10 -0
- package/manifest.json +216 -0
- package/package.json +4 -2
- package/references/commands/adr.md +25 -0
- package/references/commands/audit.md +15 -0
- package/references/commands/brief.md +16 -0
- package/references/commands/generate.md +7 -6
- package/references/commands/site.md +25 -23
- package/references/commands/vitepress.md +20 -0
- package/references/memory/20-brain-baas-integration.md +83 -0
- package/references/memory/adr-template.md +84 -0
- package/references/memory/changelog-rules.md +58 -0
- package/references/memory/collection-sources.md +48 -47
- package/references/memory/decision-points.md +72 -0
- package/references/memory/doc-templates.md +102 -73
- package/references/memory/doc-tree.md +38 -37
- package/references/memory/docsify-config.md +274 -273
- package/references/memory/git-doc-sync-hook.md +54 -0
- package/references/memory/mkdocs-config.md +171 -170
- package/references/memory/naming-conventions.md +40 -0
- package/references/memory/project-mindmap.md +66 -0
- package/references/memory/site-engines.md +32 -34
- package/references/memory/stacks/js-ts.md +47 -45
- package/references/memory/stacks/php.md +35 -33
- package/references/memory/stacks/react-vue-next.md +52 -50
- package/references/memory/tone-of-voice.md +31 -0
- package/references/memory/vitepress-config.md +174 -0
- package/references/workflows/audit.md +42 -0
- package/references/workflows/brief.md +105 -0
- package/references/workflows/collect.md +60 -25
- package/references/workflows/generate-adr.md +41 -0
- package/references/workflows/generate-changelog.md +52 -0
- package/references/workflows/init-docs.md +44 -18
- package/references/workflows/vitepress.md +57 -0
- package/scripts/audit_docs.py +190 -0
- package/scripts/clean_orphaned_assets.py +185 -0
- package/tools/build-skill.js +3 -0
- package/assets/og-default.png +0 -0
|
@@ -1,47 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
| Local
|
|
47
|
-
|
|
|
1
|
+
<!-- last-verified: 2026-09-02 -->
|
|
2
|
+
# Memory: collection-sources
|
|
3
|
+
|
|
4
|
+
The five dimensions `collect` runs against a target, and exactly what to pull from each. Operational — no rationale.
|
|
5
|
+
|
|
6
|
+
## 1. Code parsing
|
|
7
|
+
|
|
8
|
+
- Extract existing docblocks/comments verbatim (don't paraphrase yet — that's `generate`'s job).
|
|
9
|
+
- List every public function, method, class, exported type, and (for components) prop/slot/event definition.
|
|
10
|
+
- Note which of these already have adequate comments vs. none vs. stale (comment doesn't match current signature).
|
|
11
|
+
|
|
12
|
+
## 2. Commit history
|
|
13
|
+
|
|
14
|
+
- `git log --follow -- <path>` for the target's files: pull commit messages that explain *why*, not routine messages ("fix typo").
|
|
15
|
+
- Any available PR/MR descriptions touching the target: design decisions, rejected alternatives, known limitations mentioned by the author.
|
|
16
|
+
- Flag any TODO/FIXME/HACK comments found alongside — they're often undocumented known issues.
|
|
17
|
+
|
|
18
|
+
## 3. Runtime & environment
|
|
19
|
+
|
|
20
|
+
- Every environment variable the target reads (grep for `getenv`/`process.env`/`$_ENV`/config-loader calls), with whether it's required or optional and any default.
|
|
21
|
+
- Software dependencies and version constraints from the manifest (`composer.json`, `package.json`) that the target actually uses — not the whole project's dependency list.
|
|
22
|
+
- Any stated hardware/resource limits (memory limits, timeout values, rate limits) found in config or comments.
|
|
23
|
+
- **Sanitization Rule**: Never collect real values of secrets (API keys, passwords, JWT secrets, private IP addresses, database credentials). Store only the variable name, description, and a synthetic example placeholder (e.g. `sk_test_EXAMPLE123456`, `203.0.113.10`).
|
|
24
|
+
|
|
25
|
+
## 4. User persona tracing
|
|
26
|
+
|
|
27
|
+
- Classify the target's readership: **API consumer** (calls it from outside), **internal maintainer** (edits this code), **end-user** (uses a UI built on it), or a mix.
|
|
28
|
+
- For each persona present, note which facts from the other four dimensions matter to them — this list is what `generate` uses to prioritize content per doc type.
|
|
29
|
+
|
|
30
|
+
## 5. Error patterns
|
|
31
|
+
|
|
32
|
+
- Every thrown exception / returned error code / rejected promise in the target, with the condition that triggers it.
|
|
33
|
+
- How each error is meant to be handled or surfaced (caught and logged? bubbled to caller? shown to end-user?) — from code and any logging statements found.
|
|
34
|
+
- Common failure modes mentioned in commit history or TODO comments that aren't yet reflected in actual error handling.
|
|
35
|
+
- **Scrubbing Rule**: Redact real database connection strings, local absolute file paths (e.g. `/home/user/project/...`), or authorization headers that might appear in error logs or exception messages.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🔒 Security & Link Sanitization Reference
|
|
40
|
+
|
|
41
|
+
| Item Category | Dangerous / Prohibited | Mandatory Safe Replacement |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| API Keys / Tokens | `sk_live_948f98a7c...` | `YOUR_API_KEY_HERE` or `EXAMPLE_TOKEN_123` |
|
|
44
|
+
| Passwords / DB Secrets | `P@ssw0rd2026!` | `your_secure_password` |
|
|
45
|
+
| Server IPs | `192.168.1.15`, `45.33.21.99` | `203.0.113.1` (RFC 5737 doc range) |
|
|
46
|
+
| Local Drive Paths | `file:///C:/path/to/project/...` | `./docs/guides/` or `project-root/` |
|
|
47
|
+
| Local Workstation URLs | `http://localhost:8080/secret` | `https://api.example.com` or `http://localhost:PORT` |
|
|
48
|
+
| User Home Dirs | `/home/developer/workspace/...` | `~/project` or `/path/to/project` |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Memory: decision-points
|
|
2
|
+
|
|
3
|
+
<!-- last-verified: 2026-09-08 -->
|
|
4
|
+
|
|
5
|
+
Operational decision framework for documentation architecture and codebase interview governance. Enforces Contextual Decision Layer (CDL v2.0) and Dual-Mode Decision Architect (DM-DA) protocols.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🏛️ Decision Dimensions (D1–D5)
|
|
10
|
+
|
|
11
|
+
| Code | Decision Dimension | Options (Reference SSOT) | Default Fallback | Ambiguity / Trigger Condition |
|
|
12
|
+
|:---:|---|---|---|---|
|
|
13
|
+
| **D1** | **Documentation Purpose & Scope** | • `full_codebase` (Complete API surface + architecture guides)<br>• `api_surface_only` (Public exports, routes, and client SDKs)<br>• `internal_architecture` (Developer onboarding, ADRs, module contracts)<br>• `end_user_docs` (User guides, tutorials, setup walkthroughs) | `full_codebase` | When request asks to "document this project" without specifying audience or depth. |
|
|
14
|
+
| **D2** | **Publishing Platform Engine** | • `mkdocs_material` (Static HTML compilation, lunr offline search, bilingual i18n)<br>• `docsify_spa` (Zero-build client runtime SPA, instant markdown preview)<br>• `static_markdown` (Raw markdown files under `/docs` with root README) | `mkdocs_material` (if python available) / `docsify_spa` | When user has not configured `mkdocs.yml` or `docs/index.html`. |
|
|
15
|
+
| **D3** | **Target Persona & Linguistic Register** | • `bilingual_developer` (Arabic/English parallel guides, technical terminology)<br>• `api_consumer` (Strict English technical docs, contract signatures)<br>• `internal_maintainer` (Architecture rationale, git commit history context)<br>• `end_user` (Simplified bilingual non-technical user documentation) | `bilingual_developer` | When project has not specified language or target reader in `brand.yaml`. |
|
|
16
|
+
| **D4** | **Hygiene & Redaction Policy** | • `strict_zero_leak` (Mandatory automated regex masking of all IPs, DB passwords, API tokens)<br>• `public_sdk_redaction` (Scrub all internal routes, mock endpoints only)<br>• `internal_audit_permissive` (Permit local loopback `127.0.0.1` and dummy sample envs) | `strict_zero_leak` | Mandatory for all public or open-source documentation generation. |
|
|
17
|
+
| **D5** | **Collection Depth & Extraction Dimensions** | • `full_5_dimensions` (Source AST + Git commit rationale + Env vars + Personas + Error patterns)<br>• `signatures_and_types` (Public function/class docblocks only)<br>• `architecture_and_rationale` (Module boundaries, ADRs, and commit history) | `full_5_dimensions` | Decides computational depth of subsequent `collect` workflow. |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 🧭 Dual Operational Modes (DM-DA)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
[CDL v2.0 Protocol]
|
|
25
|
+
│
|
|
26
|
+
▼
|
|
27
|
+
Context Delta Resolution ──(Unknowns = ∅)──► Instant Baseline Confirmation
|
|
28
|
+
│
|
|
29
|
+
├─► [MODE A] 🎯 Smart 3-Round Protocol (Deterministic alignment in 3 rounds)
|
|
30
|
+
│ Round 1: Purpose & Target Audience
|
|
31
|
+
│ Round 2: Engine & Architecture
|
|
32
|
+
│ Round 3: Boundaries, Hygiene & Safe Defaults
|
|
33
|
+
│ └── Escalation Gate: Confirm OR Escalate to Mode B
|
|
34
|
+
│
|
|
35
|
+
└─► [MODE B] 🔥 Relentless Debate & Interview (Debate Mode)
|
|
36
|
+
Continuous multi-turn interrogation challenging assumptions
|
|
37
|
+
Forces binary trade-offs (static vs SPA, brevity vs depth)
|
|
38
|
+
Terminates strictly on: "END DEBATE" / "اعتماد"
|
|
39
|
+
Emits: architectural_debate_synthesis.md
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### [MODE A] 🎯 Smart 3-Round Protocol (الارتجال الذكي المقيد)
|
|
43
|
+
- **Round 1: Purpose & Scope (D1 + D3)**: Pinpoint primary documentation consumer and technical scope.
|
|
44
|
+
- **Round 2: Architecture & Engine (D2 + D5)**: Select publishing engine and depth of code extraction.
|
|
45
|
+
- **Round 3: Hygiene & Safe Defaults (D4 + Remaining)**: Enforce security scrubbing rules and apply defaults.
|
|
46
|
+
- **Strict Termination**: Finishes at Round 3, saves snapshot, and presents the Escalation Gate:
|
|
47
|
+
> *"هل تعتمد هذه البنية المبدئية للبدء فوراً، أم تفضل تفعيل [نمط المناظرة 🔥 Debate Mode] لتفكيك الافتراضات واختبار صلابة الهيكلية التوثيقية؟"*
|
|
48
|
+
|
|
49
|
+
### [MODE B] 🔥 Relentless Debate & Interview (الاستجواب والمناظرة اللانهائية — Debate Mode)
|
|
50
|
+
- **Activation**: Direct `/debate`, or Mode A Round 3 escalation.
|
|
51
|
+
- **Behavior**:
|
|
52
|
+
- Relentless multi-turn counter-questioning challenging documentation choices:
|
|
53
|
+
- *"Why choose Docsify client-side SPA if SEO and offline indexability are critical for external developers?"*
|
|
54
|
+
- *"Why document internal private methods if the primary goal is public API adoption?"*
|
|
55
|
+
- *"How will the team prevent confidential server IPs and auth secrets from slipping into generated guides?"*
|
|
56
|
+
- *"If the documentation is bilingual Arabic/English, how will code snippets and RTL UI callouts remain visually coherent without layout breakages?"*
|
|
57
|
+
- Exposes anti-patterns: bloated doc sets nobody reads, duplicate API references, undocumented environment configurations.
|
|
58
|
+
- Forces binary, uncompromising trade-offs.
|
|
59
|
+
- **Termination**: Ends **only** when user signals `"END DEBATE"` or `"اعتماد"`.
|
|
60
|
+
- **Deliverables**:
|
|
61
|
+
- Generates formal synthesis: `docs/architectural_debate_synthesis.md`.
|
|
62
|
+
- Persists confirmed parameters to `.tidyfactor/doc-brief.snapshot.yaml` and `.tidyfactor/doc-brief.md`.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## ⚡ Boolean Skip Conditions (Deterministic Bypass)
|
|
67
|
+
|
|
68
|
+
Skip interactive questioning and adopt safe defaults immediately if ANY condition is met:
|
|
69
|
+
1. **Existing Snapshot**: `.tidyfactor/doc-brief.snapshot.yaml` exists and `track_staleness` confirms zero file drift.
|
|
70
|
+
2. **Explicit User Declaration**: User specifies complete parameters in the prompt (e.g. *"Init MkDocs Material docs for public API with strict redaction"*).
|
|
71
|
+
3. **Direct Stack Command**: User calls specific engine commands directly (`/mkdocs` or `/docsify`).
|
|
72
|
+
4. **Maintenance Mode**: An audit (`audit_docs`) or validation run (`validate_skill.py`) preserves current configurations.
|
|
@@ -1,73 +1,102 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
<!-- last-verified: 2026-09-09 -->
|
|
2
|
+
# Memory: doc-templates
|
|
3
|
+
|
|
4
|
+
Shapes for each doc type `generate` produces. Templates, not prose — fill in from `collect` findings.
|
|
5
|
+
|
|
6
|
+
## API reference (`docs/api/<target>.md`)
|
|
7
|
+
|
|
8
|
+
```markdown
|
|
9
|
+
# <Target> API Reference
|
|
10
|
+
|
|
11
|
+
<one-line purpose, from code parsing findings>
|
|
12
|
+
|
|
13
|
+
## <FunctionOrMethodName>
|
|
14
|
+
|
|
15
|
+
<signature, stack-formatted per the matching stacks/*.md file>
|
|
16
|
+
|
|
17
|
+
**Parameters**
|
|
18
|
+
| Name | Type | Required | Description |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
|
|
21
|
+
**Returns**: <type> — <description>
|
|
22
|
+
|
|
23
|
+
**Throws / Errors**: <from error-patterns findings>
|
|
24
|
+
|
|
25
|
+
**Example**
|
|
26
|
+
<minimal usage example>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
<!-- repeat per public function/method/endpoint/component -->
|
|
30
|
+
|
|
31
|
+
## See also
|
|
32
|
+
<cross-links to related target docs, if any>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## README (project root `README.md`)
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
# <Project Name>
|
|
39
|
+
|
|
40
|
+
<one-line description>
|
|
41
|
+
|
|
42
|
+
## Requirements
|
|
43
|
+
<software dependencies + version constraints, from runtime & environment findings>
|
|
44
|
+
|
|
45
|
+
## Setup
|
|
46
|
+
<install steps, from runtime & environment findings>
|
|
47
|
+
|
|
48
|
+
## Environment variables
|
|
49
|
+
| Variable | Required | Default | Description | Example |
|
|
50
|
+
|---|---|---|---|---|
|
|
51
|
+
| `API_KEY` | Yes | — | Secret authentication token | `EXAMPLE_TOKEN_1234567890ABCDEFGH` |
|
|
52
|
+
| `DB_HOST` | Yes | `localhost` | Database host IP or hostname | `203.0.113.10` |
|
|
53
|
+
| `DB_PASS` | Yes | — | Database user password | `your_secret_password` |
|
|
54
|
+
|
|
55
|
+
## Usage
|
|
56
|
+
<minimal example>
|
|
57
|
+
|
|
58
|
+
## Documentation
|
|
59
|
+
Full reference: [`/docs`](./docs/README.md)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Guide (`docs/guides/<purpose-slug>.md`)
|
|
63
|
+
|
|
64
|
+
```markdown
|
|
65
|
+
# <Guide Title>
|
|
66
|
+
|
|
67
|
+
<one-line: what this guide covers and who it's for, from persona-tracing findings>
|
|
68
|
+
|
|
69
|
+
## <Section per logical step or concept>
|
|
70
|
+
<content, prioritized for the target persona>
|
|
71
|
+
|
|
72
|
+
## Related
|
|
73
|
+
<links to other guides or API docs using relative paths, e.g. [API Overview](../api/project.md)>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## CHANGELOG (project root `CHANGELOG.md`)
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
# Changelog
|
|
80
|
+
|
|
81
|
+
All notable changes to this project will be documented in this file.
|
|
82
|
+
|
|
83
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
84
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
85
|
+
|
|
86
|
+
## [Unreleased]
|
|
87
|
+
|
|
88
|
+
### 🚀 Added
|
|
89
|
+
- <new feature description>
|
|
90
|
+
|
|
91
|
+
### 🐛 Fixed
|
|
92
|
+
- <bug fix description>
|
|
93
|
+
|
|
94
|
+
## [1.0.0] - 2026-09-09
|
|
95
|
+
|
|
96
|
+
### 🚀 Added
|
|
97
|
+
- Initial production release.
|
|
98
|
+
- <feature list>
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
```
|
|
102
|
+
|
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
├── .doc-
|
|
11
|
-
├── .
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
└──
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
- `
|
|
1
|
+
<!-- last-verified: 2026-09-02 -->
|
|
2
|
+
# Memory: doc-tree
|
|
3
|
+
|
|
4
|
+
Canonical `/docs` folder shape and the manifest schema. Every command reads this before touching `/docs` so the structure stays identical across projects.
|
|
5
|
+
|
|
6
|
+
## Folder shape
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
docs/
|
|
10
|
+
├── README.md # doc-site landing page (generated by init)
|
|
11
|
+
├── .doc-manifest.json # tracking file (generated by init, updated by collect/generate)
|
|
12
|
+
├── .collected/ # raw findings from `collect`, one file per target — not site content
|
|
13
|
+
│ └── <target>.md
|
|
14
|
+
├── api/ # one file per documented target — only if the project has an API surface
|
|
15
|
+
│ └── <target>.md
|
|
16
|
+
└── guides/ # one file per guide purpose — only once at least one guide exists
|
|
17
|
+
└── <purpose-slug>.md
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
No Empty Structures: `init` creates `api/` only if the stack detection found an API surface (endpoints, public package exports), and `guides/` is created lazily by the first `generate-guide` run, not by `init`. `.collected/` is created lazily by the first `collect` run.
|
|
21
|
+
|
|
22
|
+
## `.doc-manifest.json` schema
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"project": "<name from composer.json/package.json>",
|
|
27
|
+
"stacks": ["php" | "js" | "ts" | "react" | "vue" | "next", "..."],
|
|
28
|
+
"collected": {
|
|
29
|
+
"<target>": "<ISO timestamp of last collect run>"
|
|
30
|
+
},
|
|
31
|
+
"generated": {
|
|
32
|
+
"<path relative to project root>": "<ISO timestamp of last generate run>"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- `collected` and `generated` are separate: a target can be collected without anything generated from it yet.
|
|
38
|
+
- `generated` entries aren't limited to `/docs` paths — `generate-readme` writes to root `README.md` and `generate-inline` touches source files, both still tracked here for audit purposes.
|