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.
Files changed (64) hide show
  1. package/README.md +55 -271
  2. package/README.zh-CN.md +56 -290
  3. package/nuxt.config.ts +17 -1
  4. package/package.json +10 -2
  5. package/src/app.config.ts +8 -104
  6. package/src/assets/icons/zhilu.svg +8 -0
  7. package/src/blog.config.ts +71 -0
  8. package/src/components/blog/BlogFooter.vue +3 -3
  9. package/src/components/blog/BlogHeader.global.vue +9 -9
  10. package/src/components/blog/BlogSidebar.vue +3 -3
  11. package/src/components/blog/ThemeToggle.vue +2 -2
  12. package/src/components/content/Alert.vue +2 -2
  13. package/src/components/content/FeedCard.vue +2 -2
  14. package/src/components/content/Mermaid.vue +1 -1
  15. package/src/components/content/ProseCode.vue +4 -32
  16. package/src/components/content/ProsePre.vue +2 -2
  17. package/src/components/content/ProseTable.vue +1 -1
  18. package/src/components/popover/Search.vue +3 -3
  19. package/src/components/post/Comment.vue +3 -15
  20. package/src/components/post/Excerpt.vue +3 -3
  21. package/src/components/post/OrderToggle.vue +3 -3
  22. package/src/components/post/PostFooter.vue +3 -4
  23. package/src/components/post/PostHeader.vue +4 -4
  24. package/src/components/post/PostSurround.vue +2 -2
  25. package/src/components/post/Slide.vue +2 -2
  26. package/src/components/util/Img.vue +1 -1
  27. package/src/components/widget/BlogLog.vue +9 -19
  28. package/src/components/widget/BlogStats.vue +4 -4
  29. package/src/components/widget/BlogTech.vue +18 -17
  30. package/src/components/widget/CommGroup.vue +43 -0
  31. package/src/composables/useArticle.ts +9 -9
  32. package/src/composables/usePagination.ts +2 -2
  33. package/src/composables/useWidgets.ts +2 -0
  34. package/src/config/app.ts +50 -4
  35. package/src/config/content.ts +6 -0
  36. package/src/config/define.mjs +1 -1
  37. package/src/config/define.ts +1 -1
  38. package/src/config/feed.ts +2 -42
  39. package/src/config/pnpm-workspace.ts +19 -0
  40. package/src/config/public.ts +1 -1
  41. package/src/config/ui.ts +111 -0
  42. package/src/generated/blog.config.mjs +3 -0
  43. package/src/generated/package-json.mjs +4 -0
  44. package/src/generated/pnpm-workspace.mjs +1 -0
  45. package/src/modules/anti-mirror/index.ts +33 -0
  46. package/src/modules/{clarity-config/anti-mirror-client.ts → anti-mirror/runtime/client.ts} +3 -3
  47. package/src/modules/clarity-config/index.ts +335 -77
  48. package/src/modules/clarity-source-layout/index.ts +13 -0
  49. package/src/pages/archive.vue +4 -4
  50. package/src/pages/index.vue +4 -3
  51. package/src/pages/link.vue +5 -5
  52. package/src/pages/preview.vue +2 -2
  53. package/src/server/api/stats.get.ts +9 -19
  54. package/src/server/routes/atom.xml.get.ts +48 -50
  55. package/src/server/routes/subscriptions.opml.get.ts +14 -31
  56. package/src/shared/utils/time.ts +13 -18
  57. package/src/types/article.ts +2 -2
  58. package/src/types/feed.ts +35 -1
  59. package/src/types/upstream-compat.d.ts +17 -0
  60. package/src/types/yaml-modules.d.ts +26 -0
  61. package/src/shared/types/content.ts +0 -30
  62. package/src/types/modal.ts +0 -16
  63. /package/src/assets/icons/{solar-rewind-back-bold-duotone.svg → SolarRewindBackBoldDuotone.svg} +0 -0
  64. /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
+ [![CI](https://github.com/iicemeta/clarity-theme/actions/workflows/ci.yml/badge.svg)](https://github.com/iicemeta/clarity-theme/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/clarity-theme)](https://www.npmjs.com/package/clarity-theme)
5
+ [![License: MIT](https://img.shields.io/npm/l/clarity-theme)](./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
- ## Features
11
+ ## Why Clarity?
8
12
 
9
- - Nuxt 4 Layer installation through one `extends` entry
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
- ## Requirements
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
- | Runtime | Version |
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 available from the npm registry as `clarity-theme`. It 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; a production install must still be able to resolve it.
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
- ## Installation
31
+ ## Choose your path
31
32
 
32
- ```bash
33
- pnpm add clarity-theme
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
- ### Git commit installation (development fallback)
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
- For unreleased commits, local debugging, or reviewing a specific change before it is published, install directly from GitHub instead:
41
+ ## Quick start
39
42
 
40
43
  ```bash
41
- pnpm add github:iicemeta/clarity-theme#<commit>
44
+ pnpm create clarity-theme my-blog
45
+ cd my-blog
46
+ pnpm dev
42
47
  ```
43
48
 
44
- This path is intended for development only. Released sites should consume the published npm version so installs are reproducible and covered by the release verification matrix.
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
- ### 1. Extend the Layer
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
- For a complete walkthrough from an existing blog-v3 project, see [Migration](./docs/MIGRATION.md). Theme data and user content are deliberately separate: the package never carries your articles, friend links, redirects, deployment settings, or package patches.
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
- ```ts
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
- | Entry | API |
92
+ | Runtime | Version |
156
93
  | --- | --- |
157
- | `clarity-theme` | Nuxt Layer root |
158
- | `clarity-theme/config` | `defineClarityConfig()` and configuration/schema types |
159
- | `clarity-theme/content` | `createClarityContentConfig()` and `ArticleSchema` |
160
- | `clarity-theme/schema` | All `clarity*` Zod schemas and derived types |
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
- Site-specific dependency patches are intentionally owned by consumers; see [Patches](./docs/PATCHES.md).
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
- ### Installing the migration skill
288
-
289
- ```bash
290
- npx skills add iicemeta/clarity-theme --list # discover available skills
291
- npx skills add iicemeta/clarity-theme --skill migrate-blog-v3-to-clarity
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 # Theme + playground workspace
303
- pnpm dev # Playground dev server
304
- pnpm generate # Playground static generation
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
- CI derives Node and pnpm versions from package metadata. It runs lint/typecheck/verify/sync/migration/contract/peers on the fixed Node matrix, then playground generate, real consumer acceptance, and rendering compatibility on the primary Node version. A separate weekly workflow only detects and reports upstream drift.
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