clarity-theme 0.1.2 → 0.1.4
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 +55 -271
- package/README.zh-CN.md +56 -290
- package/nuxt.config.ts +17 -1
- package/package.json +10 -2
- package/src/app.config.ts +8 -104
- package/src/assets/icons/zhilu.svg +8 -0
- package/src/blog.config.ts +71 -0
- package/src/components/blog/BlogFooter.vue +3 -3
- package/src/components/blog/BlogHeader.global.vue +9 -9
- package/src/components/blog/BlogSidebar.vue +3 -3
- package/src/components/blog/ThemeToggle.vue +2 -2
- package/src/components/content/Alert.vue +2 -2
- package/src/components/content/FeedCard.vue +2 -2
- package/src/components/content/Mermaid.vue +1 -1
- package/src/components/content/ProseCode.vue +4 -32
- package/src/components/content/ProsePre.vue +2 -2
- package/src/components/content/ProseTable.vue +1 -1
- package/src/components/popover/Search.vue +3 -3
- package/src/components/post/Comment.vue +3 -15
- package/src/components/post/Excerpt.vue +3 -3
- package/src/components/post/OrderToggle.vue +3 -3
- package/src/components/post/PostFooter.vue +3 -4
- package/src/components/post/PostHeader.vue +4 -4
- package/src/components/post/PostSurround.vue +2 -2
- package/src/components/post/Slide.vue +2 -2
- package/src/components/util/Img.vue +1 -1
- package/src/components/widget/BlogLog.vue +9 -19
- package/src/components/widget/BlogStats.vue +4 -4
- package/src/components/widget/BlogTech.vue +18 -17
- package/src/components/widget/CommGroup.vue +43 -0
- package/src/composables/useArticle.ts +9 -9
- package/src/composables/usePagination.ts +2 -2
- package/src/composables/useWidgets.ts +2 -0
- package/src/config/app.ts +50 -4
- package/src/config/content.ts +6 -0
- package/src/config/define.mjs +1 -1
- package/src/config/define.ts +1 -1
- package/src/config/feed.ts +2 -42
- package/src/config/pnpm-workspace.ts +19 -0
- package/src/config/public.ts +1 -1
- package/src/config/ui.ts +111 -0
- package/src/generated/blog.config.mjs +3 -0
- package/src/generated/package-json.mjs +4 -0
- package/src/generated/pnpm-workspace.mjs +1 -0
- package/src/modules/anti-mirror/index.ts +33 -0
- package/src/modules/{clarity-config/anti-mirror-client.ts → anti-mirror/runtime/client.ts} +3 -3
- package/src/modules/clarity-config/index.ts +335 -77
- package/src/modules/clarity-source-layout/index.ts +13 -0
- package/src/pages/archive.vue +4 -4
- package/src/pages/index.vue +4 -3
- package/src/pages/link.vue +5 -5
- package/src/pages/preview.vue +2 -2
- package/src/server/api/stats.get.ts +9 -19
- package/src/server/routes/atom.xml.get.ts +48 -50
- package/src/server/routes/subscriptions.opml.get.ts +14 -31
- package/src/shared/utils/time.ts +13 -18
- package/src/types/article.ts +2 -2
- package/src/types/feed.ts +35 -1
- package/src/types/upstream-compat.d.ts +17 -0
- package/src/types/yaml-modules.d.ts +26 -0
- package/src/shared/types/content.ts +0 -30
- package/src/types/modal.ts +0 -16
- /package/src/assets/icons/{solar-rewind-back-bold-duotone.svg → SolarRewindBackBoldDuotone.svg} +0 -0
- /package/src/assets/icons/{solar-rewind-forward-bold-duotone.svg → SolarRewindForwardBoldDuotone.svg} +0 -0
package/README.md
CHANGED
|
@@ -1,51 +1,55 @@
|
|
|
1
1
|
# Clarity Theme
|
|
2
2
|
|
|
3
|
+
[](https://github.com/iicemeta/clarity-theme/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/clarity-theme)
|
|
5
|
+
[](./LICENSE)
|
|
6
|
+
|
|
3
7
|
**English** | [简体中文](./README.zh-CN.md)
|
|
4
8
|
|
|
5
9
|
Clarity Theme is a reusable **Nuxt 4 Layer blog theme** extracted from [L33Z22L11/blog-v3](https://github.com/L33Z22L11/blog-v3). It provides the generic blog UI, page structure, Markdown/MDC rendering, SEO integration, and feed/server outputs; your project provides all site data and content.
|
|
6
10
|
|
|
7
|
-
##
|
|
11
|
+
## Why Clarity?
|
|
8
12
|
|
|
9
|
-
-
|
|
10
|
-
- Validated site configuration with defaults and strict unknown-field rejection
|
|
11
|
-
- Nuxt Content collection factory for article metadata and sitemap data
|
|
12
|
-
- Markdown, MDC components, Shiki code highlighting, KaTeX, Mermaid, ABC music scores, and rich images
|
|
13
|
-
- Article list, archive, pagination, TOC, search, theme toggle, widgets, preview, and 404 routing
|
|
14
|
-
- Atom, OPML, statistics, robots, sitemap, and LLMs outputs
|
|
15
|
-
- Twikoo, head scripts, and anti-mirror integrations driven by consumer configuration
|
|
16
|
-
- UI defaults, app config overrides, custom Shiki themes, and same-path component overrides
|
|
17
|
-
- Automated workspace, tarball-consumer, SSR, browser, hydration, purity, contract, peer, and upstream-sync checks
|
|
13
|
+
Clarity replaces the traditional sync-fork workflow. Instead of merging thousands of upstream lines into your blog repository, you consume the Theme as a Layer and keep only your own files:
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
- **One `extends` entry** installs the whole blog application skeleton.
|
|
16
|
+
- **Theme and consumer are separated**: articles, friend links, redirects, deployment settings, secrets, and dependency patches never enter the Theme package.
|
|
17
|
+
- **Validated configuration**: `clarity.config.ts` is schema-checked with defaults and strict unknown-field rejection.
|
|
18
|
+
- **Content factory**: the Nuxt Content collection and article schema are derived from your configuration.
|
|
19
|
+
- **Rich rendering**: Markdown, MDC components, Shiki code highlighting, KaTeX, Mermaid, ABC music scores, and rich images.
|
|
20
|
+
- **Complete outputs**: article list, archive, pagination, TOC, search, theme toggle, widgets, Atom, OPML, statistics, robots, sitemap, and LLMs.
|
|
21
|
+
- **Integrations stay yours**: Twikoo, head scripts, and anti-mirror are driven by consumer configuration.
|
|
22
|
+
- **Override without forking**: UI app-config overrides, same-path component overrides, custom Shiki themes, and consumer CSS.
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
| --- | --- |
|
|
23
|
-
| Node.js | `^22.19 \|\| ^24.11 \|\| >=26` |
|
|
24
|
-
| pnpm | 12.4.1 or a compatible package manager for your project |
|
|
25
|
-
| Nuxt peer | `^4.5.2` |
|
|
26
|
-
| Vue peer | `^3.5.42` |
|
|
24
|
+
## Core principles
|
|
27
25
|
|
|
28
|
-
Clarity is
|
|
26
|
+
- **Clarity is a Layer extraction of blog-v3**, not a reimplemented theme. Upstream UI, layout, and interaction are the source of truth by default and stay byte-identical except for explicit mechanical path rewrites recorded in `tests/upstream-parity.manifest.json`.
|
|
27
|
+
- **Upstream hard-coded behavior is preserved first.** Generalization, configuration coverage, and cleanup are future work, not this parity line.
|
|
28
|
+
- **Personal site data stays with the consumer**, following the boundary that upstream `init-project` resets.
|
|
29
|
+
- **Drift is a bug.** `pnpm test:upstream-parity` fails on any undeclared difference inside the sync surface.
|
|
29
30
|
|
|
30
|
-
##
|
|
31
|
+
## Choose your path
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
| Starting point | Documentation |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| New blog | [Create a project](./docs/getting-started/new-project.md) |
|
|
36
|
+
| Existing blog-v3 site | [Migrate from blog-v3](./docs/getting-started/migration-from-blog-v3.md) · Agent skill: `migrate-blog-v3-to-clarity` |
|
|
37
|
+
| Manual installation into an existing Nuxt app | [Manual installation](./docs/getting-started/manual-installation.md) |
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
For an Agent-assisted migration, ask your agent to use the `migrate-blog-v3-to-clarity` skill. The full skill lives in [`skills/migrate-blog-v3-to-clarity`](./skills/migrate-blog-v3-to-clarity/SKILL.md).
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
## Quick start
|
|
39
42
|
|
|
40
43
|
```bash
|
|
41
|
-
pnpm
|
|
44
|
+
pnpm create clarity-theme my-blog
|
|
45
|
+
cd my-blog
|
|
46
|
+
pnpm dev
|
|
42
47
|
```
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## Quick Start
|
|
49
|
+
The creator shows editable defaults for site identity and detects your system
|
|
50
|
+
timezone; generated projects include the `pnpm new-blog` authoring command.
|
|
47
51
|
|
|
48
|
-
|
|
52
|
+
The creator package is published separately as `create-clarity-theme` on the npm `latest` dist-tag. See [`create-clarity-theme/README.md`](./create-clarity-theme/README.md) for all options. The manual path is four files:
|
|
49
53
|
|
|
50
54
|
```ts
|
|
51
55
|
// nuxt.config.ts
|
|
@@ -54,8 +58,6 @@ export default defineNuxtConfig({
|
|
|
54
58
|
})
|
|
55
59
|
```
|
|
56
60
|
|
|
57
|
-
### 2. Define site configuration
|
|
58
|
-
|
|
59
61
|
```ts
|
|
60
62
|
// clarity.config.ts
|
|
61
63
|
import { defineClarityConfig } from 'clarity-theme/config'
|
|
@@ -65,18 +67,11 @@ export default defineClarityConfig({
|
|
|
65
67
|
title: 'My Blog',
|
|
66
68
|
description: 'Notes about technology and life',
|
|
67
69
|
url: 'https://example.com/',
|
|
68
|
-
author: {
|
|
69
|
-
name: 'My Name',
|
|
70
|
-
avatar: '/avatar.webp',
|
|
71
|
-
},
|
|
70
|
+
author: { name: 'My Name', avatar: '/avatar.webp' },
|
|
72
71
|
},
|
|
73
72
|
})
|
|
74
73
|
```
|
|
75
74
|
|
|
76
|
-
`site.title`, `site.description`, `site.url`, and `site.author.name` are required. Article, feed, stats, integration, feature, and changelog groups are optional and receive documented defaults.
|
|
77
|
-
|
|
78
|
-
### 3. Create the Content schema
|
|
79
|
-
|
|
80
75
|
```ts
|
|
81
76
|
// content.config.ts
|
|
82
77
|
import { createClarityContentConfig } from 'clarity-theme/content'
|
|
@@ -85,257 +80,46 @@ import clarityConfig from './clarity.config'
|
|
|
85
80
|
export default createClarityContentConfig(clarityConfig)
|
|
86
81
|
```
|
|
87
82
|
|
|
88
|
-
Place articles under `content/posts/` and other Content pages under `content/`.
|
|
89
|
-
|
|
90
|
-
### 4. Optionally provide friend data
|
|
91
|
-
|
|
92
|
-
```ts
|
|
93
|
-
// feeds.ts
|
|
94
|
-
import type { FeedGroup } from 'clarity-theme/config'
|
|
95
|
-
|
|
96
|
-
const feeds: FeedGroup[] = []
|
|
97
|
-
|
|
98
|
-
export default feeds
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Without this file, the friend page and OPML output use empty data and the build logs a warning.
|
|
102
|
-
|
|
103
|
-
### 5. Generate or develop
|
|
104
|
-
|
|
105
83
|
```bash
|
|
84
|
+
pnpm add clarity-theme
|
|
106
85
|
pnpm dev
|
|
107
|
-
pnpm generate
|
|
108
86
|
```
|
|
109
87
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
## Basic Configuration
|
|
113
|
-
|
|
114
|
-
| File | Responsibility |
|
|
115
|
-
| --- | --- |
|
|
116
|
-
| `clarity.config.ts` | Site identity, article semantics, feeds, stats, integrations, feature flags, changelog |
|
|
117
|
-
| `app/app.config.ts` | Optional reactive UI overrides only |
|
|
118
|
-
| `content.config.ts` | Nuxt Content collection/schema |
|
|
119
|
-
| `feeds.ts` | Optional friend data |
|
|
120
|
-
| consumer `runtimeConfig` | Environment-specific values and the only valid place for secrets |
|
|
121
|
-
|
|
122
|
-
Field-by-field defaults, visibility, and examples are documented in [Configuration](./docs/CONFIGURATION.md).
|
|
123
|
-
|
|
124
|
-
Example optional groups:
|
|
88
|
+
Place articles under `content/posts/` and other Content pages under `content/`. See [Manual installation](./docs/getting-started/manual-installation.md) for the optional `feeds.ts` friend data and deployment notes.
|
|
125
89
|
|
|
126
|
-
|
|
127
|
-
export default defineClarityConfig({
|
|
128
|
-
site: {
|
|
129
|
-
title: 'My Blog',
|
|
130
|
-
description: 'A Nuxt blog',
|
|
131
|
-
url: 'https://example.com/',
|
|
132
|
-
author: { name: 'My Name' },
|
|
133
|
-
},
|
|
134
|
-
article: {
|
|
135
|
-
defaultCategory: 'Uncategorized',
|
|
136
|
-
categories: {
|
|
137
|
-
Tech: { icon: 'tabler:code', color: '#7777ff' },
|
|
138
|
-
},
|
|
139
|
-
types: { tech: {}, story: {} },
|
|
140
|
-
},
|
|
141
|
-
feed: { limit: 50, enableStyle: true },
|
|
142
|
-
features: {
|
|
143
|
-
atom: true,
|
|
144
|
-
opml: true,
|
|
145
|
-
stats: true,
|
|
146
|
-
antiMirror: false,
|
|
147
|
-
},
|
|
148
|
-
})
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Never place tokens or private deployment credentials in `clarity.config.ts` or `app/app.config.ts`; both can affect generated client output.
|
|
152
|
-
|
|
153
|
-
## Public API
|
|
90
|
+
## Requirements
|
|
154
91
|
|
|
155
|
-
|
|
|
92
|
+
| Runtime | Version |
|
|
156
93
|
| --- | --- |
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
| `clarity-theme/img` | Avatar/favicon/image URL helpers |
|
|
162
|
-
|
|
163
|
-
The Layer also exposes the `useClarityConfig()`, `useClaritySite()`, `useClarityArticle()`, and `useClaritySiteFeedEntry()` runtime auto-imports, plus the `#clarity/feeds` injection. They are Layer contracts rather than standalone package subpaths.
|
|
164
|
-
|
|
165
|
-
The exact export/type boundary is documented in [docs/API.md](./docs/API.md).
|
|
166
|
-
|
|
167
|
-
## Customization
|
|
168
|
-
|
|
169
|
-
### UI configuration
|
|
170
|
-
|
|
171
|
-
```ts
|
|
172
|
-
// app/app.config.ts
|
|
173
|
-
export default defineAppConfig({
|
|
174
|
-
clarity: {
|
|
175
|
-
header: { emojiTail: ['📝'] },
|
|
176
|
-
pagination: { perPage: 10 },
|
|
177
|
-
nav: [
|
|
178
|
-
{
|
|
179
|
-
title: '',
|
|
180
|
-
items: [
|
|
181
|
-
{ icon: 'tabler:files', text: 'Articles', url: '/' },
|
|
182
|
-
{ icon: 'tabler:link', text: 'Friends', url: '/link' },
|
|
183
|
-
{ icon: 'tabler:archive', text: 'Archive', url: '/archive' },
|
|
184
|
-
],
|
|
185
|
-
},
|
|
186
|
-
],
|
|
187
|
-
},
|
|
188
|
-
})
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Objects merge deeply; arrays replace the Theme value entirely.
|
|
192
|
-
|
|
193
|
-
### Components
|
|
194
|
-
|
|
195
|
-
Create a Layer-relative component at the same path to replace it, for example:
|
|
196
|
-
|
|
197
|
-
```text
|
|
198
|
-
app/components/content/Badge.vue
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Consumer components take precedence over Layer components. Nuxt currently emits a duplicate-name warning for this intentional override pattern.
|
|
202
|
-
|
|
203
|
-
### Shiki themes
|
|
204
|
-
|
|
205
|
-
Provide `app/shiki.config.ts` in the consumer project. The Theme fallback is used only when this file does not exist.
|
|
206
|
-
|
|
207
|
-
UI groups, same-path component overrides, CSS overrides, server/route customization, and Shiki ownership are described together in [Customization](./docs/CUSTOMIZATION.md).
|
|
208
|
-
|
|
209
|
-
## Compatibility and Verification
|
|
210
|
-
|
|
211
|
-
The verification suite is designed to cover:
|
|
212
|
-
|
|
213
|
-
- Playground static generation
|
|
214
|
-
- Independent `pnpm pack` consumer installation
|
|
215
|
-
- Five package exports in Node and TypeScript
|
|
216
|
-
- Three configuration branches
|
|
217
|
-
- Markdown/MDC/code/math/Mermaid/music/image rendering
|
|
218
|
-
- Production SSR, real browser rendering, and dev hydration
|
|
219
|
-
- Search, pagination, archive, TOC, SEO, robots, sitemap, LLMs, Atom, OPML, stats, permalink, 404, Twikoo branches, anti-mirror injection, UI override, and component override
|
|
220
|
-
- Theme purity, peer dependencies, sync tooling, and upstream drift
|
|
221
|
-
|
|
222
|
-
The generated release matrix lives in [Compatibility](./docs/COMPATIBILITY.md). Current exact counts, known limitations, technical debt, and release blockers live in [Project status](./docs/PROJECT-STATUS.md) and [Roadmap](./docs/ROADMAP.md). A release must rerun the ordered suite on the exact commit; earlier results are not a substitute.
|
|
94
|
+
| Node.js | `^22.19 \|\| ^24.11 \|\| >=26` |
|
|
95
|
+
| pnpm | 12.4.1 or a compatible package manager for your project |
|
|
96
|
+
| Nuxt peer | `^4.5.2` |
|
|
97
|
+
| Vue peer | `^3.5.42` |
|
|
223
98
|
|
|
224
|
-
|
|
99
|
+
Clarity is part of your application runtime (the Nuxt build and static generation load the Layer directly), so install it as a regular dependency rather than a development dependency.
|
|
225
100
|
|
|
226
101
|
## Documentation
|
|
227
102
|
|
|
228
|
-
All documents are also available in 简体中文 as sibling `*.zh-CN.md` files.
|
|
229
|
-
|
|
230
|
-
| Document | Purpose |
|
|
231
|
-
| --- | --- |
|
|
232
|
-
| [Project status](./docs/PROJECT-STATUS.md) | Current snapshot, verified capabilities, limitations, debt, gaps, and milestone |
|
|
233
|
-
| [Roadmap](./docs/ROADMAP.md) | Prioritized P0/P1/P2 debt register, deferred decisions, and milestone order |
|
|
234
|
-
| [Migration](./docs/MIGRATION.md) | Preserve blog-v3 content, configuration, redirects, patches, custom code, and assets while adopting Clarity |
|
|
235
|
-
| [Architecture](./docs/ARCHITECTURE.md) | Theme/consumer boundary and build/runtime data flows |
|
|
236
|
-
| [API](./docs/API.md) | Public package/Layer API versus internal implementation |
|
|
237
|
-
| [Configuration](./docs/CONFIGURATION.md) | Field-level Clarity configuration contract and examples |
|
|
238
|
-
| [Customization](./docs/CUSTOMIZATION.md) | UI, component, Shiki, CSS, server, and route overrides |
|
|
239
|
-
| [Compatibility](./docs/COMPATIBILITY.md) | Generated release compatibility matrix |
|
|
240
|
-
| [Upstream sync](./docs/UPSTREAM.md) | Baseline, manifest, commands, conflicts, and workflow |
|
|
241
|
-
| [Patches](./docs/PATCHES.md) | Consumer patch ownership and current conclusions |
|
|
242
|
-
| [Release audit](./docs/RELEASE-AUDIT.md) | Pre-closing engineering audit and remaining release gates |
|
|
243
|
-
| [Release checklist](./docs/RELEASE-CHECKLIST.md) | Exact final checks, remaining blockers, and verification evidence |
|
|
244
|
-
| [Publishing](./docs/PUBLISHING.md) | Versioning, tags, GitHub Releases, OIDC publishing, provenance, and rollback policy |
|
|
245
|
-
| [Changelog](./CHANGELOG.md) | Consumer-facing release history |
|
|
246
|
-
| [Extraction history](./docs/history/2026-09-layer-extraction.md) | Historical phases and one-time differential validation |
|
|
247
|
-
|
|
248
|
-
## Repository Layout
|
|
249
|
-
|
|
250
|
-
The repository root is the engineering layer; all Theme runtime source lives
|
|
251
|
-
under `src/`:
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
clarity-theme/
|
|
255
|
-
├─ src/ # Theme runtime source (Layer srcDir)
|
|
256
|
-
│ ├─ assets/ components/ composables/ layouts/ middleware/
|
|
257
|
-
│ ├─ pages/ plugins/ stores/ types/ utils/
|
|
258
|
-
│ ├─ app.config.ts app.vue error.vue shiki.config.ts
|
|
259
|
-
│ ├─ config/ # config API sources (npm ./config ./content ./schema)
|
|
260
|
-
│ ├─ img/ # img API sources (npm ./img)
|
|
261
|
-
│ ├─ modules/ # source-layout bootstrap + clarity-config modules
|
|
262
|
-
│ ├─ public/ server/ shared/ remark-plugins/
|
|
263
|
-
├─ skills/ # Agent workflow skills (not part of the npm package)
|
|
264
|
-
├─ docs/ # Human documentation
|
|
265
|
-
├─ playground/ # Workspace-linked development consumer
|
|
266
|
-
├─ scripts/ tests/ # Verification and tooling
|
|
267
|
-
└─ nuxt.config.ts, package.json, sync-manifest.json, …
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
`nuxt.config.ts` stays at the package root. Its first module,
|
|
271
|
-
`src/modules/clarity-source-layout`, applies the `src/` directory metadata to
|
|
272
|
-
the Clarity layer only; static `srcDir`/`serverDir`/`dir.*` values are not
|
|
273
|
-
used because c12 would merge them into consumer root config. npm, Git-commit,
|
|
274
|
-
and local-directory installs therefore resolve the same layout without
|
|
275
|
-
overriding a consumer's own application directories.
|
|
276
|
-
|
|
277
|
-
The npm package, the Agent skill, and the docs are three separate concerns:
|
|
278
|
-
|
|
279
|
-
- **`clarity-theme` (npm package)** — the runtime Nuxt Layer installed with
|
|
280
|
-
`extends: ['clarity-theme']`. Its `files` field ships only `src/` plus the
|
|
281
|
-
root entry files; dev assets never enter the tarball.
|
|
282
|
-
- **`skills/migrate-blog-v3-to-clarity`** — the canonical Agent workflow for
|
|
283
|
-
migrating an existing blog-v3 project. It is versioned with the repository
|
|
284
|
-
but intentionally **not** bundled into the npm package.
|
|
285
|
-
- **`docs/`** — human-readable documentation mirrored in English and Chinese.
|
|
103
|
+
All documents are also available in 简体中文 as sibling `*.zh-CN.md` files. Start from the [documentation index](./docs/README.md):
|
|
286
104
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
For development, `npx skills add ./skills --list` discovers the local copy.
|
|
295
|
-
To migrate a blog-v3 site with an Agent, ask it to use the
|
|
296
|
-
`migrate-blog-v3-to-clarity` skill; the human walkthrough remains
|
|
297
|
-
[Migration](./docs/MIGRATION.md).
|
|
105
|
+
- **Getting started** — [new project](./docs/getting-started/new-project.md), [manual installation](./docs/getting-started/manual-installation.md), [migrating from blog-v3](./docs/getting-started/migration-from-blog-v3.md)
|
|
106
|
+
- **Guides** — [configuration](./docs/guides/configuration.md), [content](./docs/guides/content.md), [customization](./docs/guides/customization.md), [integrations](./docs/guides/integrations.md)
|
|
107
|
+
- **Reference** — [public API](./docs/reference/api.md), [routes and outputs](./docs/reference/routes-and-outputs.md), [compatibility matrix](./docs/reference/compatibility.md)
|
|
108
|
+
- **Concepts** — [architecture](./docs/concepts/architecture.md)
|
|
109
|
+
- **Maintainers** — [development](./docs/maintainers/development.md), [testing](./docs/maintainers/testing.md), [upstream sync](./docs/maintainers/upstream-sync.md), [patches](./docs/maintainers/patches.md), [publishing](./docs/maintainers/publishing.md), [release checklist](./docs/maintainers/release-checklist.md), [project status](./docs/maintainers/project-status.md), [roadmap](./docs/maintainers/roadmap.md), [documentation rules](./docs/maintainers/documentation.md)
|
|
110
|
+
- **Release history** — [CHANGELOG](./CHANGELOG.md); historical records live under [docs/history](./docs/history/)
|
|
298
111
|
|
|
299
112
|
## Development
|
|
300
113
|
|
|
301
114
|
```bash
|
|
302
|
-
pnpm install
|
|
303
|
-
pnpm dev
|
|
304
|
-
pnpm generate
|
|
305
|
-
pnpm lint
|
|
115
|
+
pnpm install # Theme + playground workspace
|
|
116
|
+
pnpm dev # Playground dev server
|
|
117
|
+
pnpm generate # Playground static generation
|
|
118
|
+
pnpm lint # ESLint + Stylelint
|
|
306
119
|
pnpm typecheck
|
|
307
|
-
pnpm verify # Purity/static leak checks
|
|
308
|
-
pnpm peers check
|
|
309
|
-
pnpm test:sync
|
|
310
|
-
pnpm test:migration
|
|
311
|
-
pnpm test:contract
|
|
312
|
-
pnpm test:consumer
|
|
313
|
-
pnpm test:compatibility
|
|
314
|
-
pnpm pack --dry-run # inspect the npm tarball without writing it
|
|
315
120
|
```
|
|
316
121
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
See [Project status → CI](./docs/PROJECT-STATUS.md#10-ci) for the exact CI stages and permissions.
|
|
320
|
-
|
|
321
|
-
## Upstream Synchronization
|
|
322
|
-
|
|
323
|
-
Clarity is extracted from an upstream Nuxt blog and records the exact reviewed baseline in `sync-manifest.json`. The synchronization tooling separates directly includable paths, consumer-owned exclusions, transformed Theme contracts, and manual review paths; unknown upstream changes block apply. Use:
|
|
324
|
-
|
|
325
|
-
```bash
|
|
326
|
-
pnpm sync:check # compare manifest baseline with remote
|
|
327
|
-
pnpm sync:diff # classify upstream changes
|
|
328
|
-
pnpm sync:apply # transactionally apply reviewed include-only changes
|
|
329
|
-
pnpm sync:verify # rerun Theme purity and baseline checks
|
|
330
|
-
```
|
|
331
|
-
|
|
332
|
-
The weekly workflow only detects and reports drift. It never applies, commits, or pushes changes. See [Upstream sync](./docs/UPSTREAM.md).
|
|
333
|
-
|
|
334
|
-
## Release Status
|
|
335
|
-
|
|
336
|
-
Clarity Theme is a **v0.1.2 gated npm release**. The Layer/package boundary, validated configuration, Content factory, rendering pipeline, server outputs, playground, real-consumer acceptance, compatibility matrix, three-layer CI, upstream-sync baseline, release gate, and OIDC publish workflow are implemented. See the [release checklist](./docs/RELEASE-CHECKLIST.md) for the exact remaining manual publication steps.
|
|
337
|
-
|
|
338
|
-
The v0.1.0 correctness gates from [Roadmap](./docs/ROADMAP.md) are resolved: server/client configuration is split, feature-off routes return 404 at runtime, anti-mirror navigation is verified in a real browser, the no-op random-permalink field is removed, and multi-pattern stats are covered by a regression test. Remaining deferred items are recorded in the roadmap and release notes.
|
|
122
|
+
See [development](./docs/maintainers/development.md) and [testing](./docs/maintainers/testing.md) for the full verification matrix, upstream synchronization, and release workflow.
|
|
339
123
|
|
|
340
124
|
## License
|
|
341
125
|
|