create-specfuse 0.10.1 → 0.11.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 CHANGED
@@ -31,6 +31,7 @@ my-app/
31
31
  │ ├── settings.local.json # 权限白名单
32
32
  │ └── skills/
33
33
  │ ├── design-md/ # 设计令牌生成技能
34
+ │ ├── fusedoc/ # 文档标准技能(含 3 份参考文件)
34
35
  │ ├── fusereview/ # 实施后代码评审技能
35
36
  │ └── fuseqa/ # 实施后端到端验收技能(含 4 份模板)
36
37
  └── openspec/
@@ -45,6 +46,14 @@ my-app/
45
46
 
46
47
  涉 UI/前端的项目,Think 阶段会触发 `/design-md` 技能生成 `DESIGN-TOKENS.md`,定义色彩、字体、间距、圆角等设计变量。也可手动 `/design-md` 为已有项目生成。
47
48
 
49
+ ### FuseDoc(文档标准,不是拍)
50
+
51
+ `/fusedoc` 是贯穿全链路的文档标准,**不属于五拍中的任何一拍**:无检查点、无强制提问、不进 apply 收尾序列,由产出散文的各阶段按需调用。它管三件事——一段话必须说什么、读起来是从仓库出发还是从写作会话出发、一个事实该放在哪一层。
52
+
53
+ ```bash
54
+ /fusedoc <scope> # scope 必填;不填则报缺输入并停止,不推断全仓库范围
55
+ ```
56
+
48
57
  ## 五拍流水线
49
58
 
50
59
  在项目中启动 Claude Code,按这套节奏开发:
@@ -0,0 +1,423 @@
1
+ # Calibration examples
2
+
3
+ Use these to identify the governing principle, not as text templates. **Balanced** preserves every load-bearing proposition with the least explanation needed at that location.
4
+
5
+ This file quotes flawed prose deliberately, so search patterns exclude this skill's own directory.
6
+
7
+ ## Part 1 — Proposition judgment
8
+
9
+ ### Preserve every factual clause
10
+
11
+ **Original:** "The coordinator carefully serializes writes per session, flushes buffered events before disposal resolves, and reports backend failures to the caller."
12
+
13
+ **Over-trimmed:** "The coordinator serializes persistence."
14
+
15
+ **Balanced:** "The coordinator serializes writes per session, flushes buffered events before disposal resolves, and reports backend failures to the caller."
16
+
17
+ Remove decoration and repetition, not propositions. Actor, per-session scope, disposal ordering, and failure visibility are separate facts.
18
+
19
+ ### Explicit scope limitation is functional
20
+
21
+ **Over-trimmed:** "Read the sources and use judgment."
22
+
23
+ **Balanced:** "This is guidance, not a complete checklist. Use judgment beyond the named checks; documented requirements still apply."
24
+
25
+ **Over-detailed:** Several paragraphs defending why lists cannot replace independent reasoning.
26
+
27
+ Keep the explicit limitation because it changes how an agent applies the workflow. Trim repeated persuasion, not the guardrail.
28
+
29
+ ### A how-to guide keeps action and verification
30
+
31
+ **Over-trimmed:** "Add tests for the new command."
32
+
33
+ **Balanced:** "Test registration and teardown at unit level, exercise the command through the real entry path, and add a recorded-output test when its rendering changes. Verify the assertion observes the external result rather than the tool's own report."
34
+
35
+ **Over-detailed:** A walkthrough of every fixture file and assertion already visible in the example code.
36
+
37
+ Keep the test tiers, required action, real entry path, and observable verification. Remove fixture narration.
38
+
39
+ ### Preserve ownership and timing
40
+
41
+ **Over-trimmed:** "Provider work is cancelled during teardown."
42
+
43
+ **Balanced:** "The runtime requests provider cancellation before releasing the child scope; the provider remains responsible for joining its workers before disposal resolves."
44
+
45
+ **Over-detailed:** A chronological account of every promise and callback used to implement teardown.
46
+
47
+ The actor, ordering, point where ownership changes, and completion guarantee are separate factual clauses.
48
+
49
+ ### Event documentation preserves ordering consequences
50
+
51
+ **Over-trimmed:** "Composes and caches the request prefix."
52
+
53
+ **Balanced:** "Composes the request prefix once before the first request. Listener appends join the current request, and size accounting receives the composed prefix."
54
+
55
+ **Over-detailed:** A walkthrough of the helpers, cache fields, and callbacks that implement the ordering.
56
+
57
+ Event order and its current-request consequence are caller-visible behavior, not implementation narration.
58
+
59
+ ### Orient complicated code without narrating it
60
+
61
+ **Over-trimmed:** "Worker sandbox support."
62
+
63
+ **Balanced:** "Owns the worker sandbox and its host bridge. Initialization is single-shot; disposal terminates the worker and rejects later calls. See the isolation design doc for the protocol rationale."
64
+
65
+ **Over-detailed:** A paragraph-by-paragraph preview of the classes and helper functions below.
66
+
67
+ Keep the module's role, dependencies, responsibilities, and non-obvious lifecycle behavior. Link architecture rationale and let the code show local control flow.
68
+
69
+ ### Public API documentation includes failures
70
+
71
+ **Over-trimmed:** "Returns the sandbox handle."
72
+
73
+ **Balanced:** "Returns the initialized sandbox handle. Throws if initialization has not completed or the sandbox has already been disposed."
74
+
75
+ **Over-detailed:** The internal state-machine branches and exact helper calls that lead to each throw.
76
+
77
+ Throws and state preconditions are caller-visible contract facts.
78
+
79
+ ### Keep a concise implementation mapping
80
+
81
+ **Over-trimmed:** "Search provider backed by an external API."
82
+
83
+ **Balanced:** "Maps each provider result to the shared search-result fields, preserving the title, URL, and text while omitting provider-only ranking metadata."
84
+
85
+ **Over-detailed:** A field-by-field restatement of the mapping code, including fields with identical names and obvious assignments.
86
+
87
+ Keep mapping details that explain where an adapter drops or changes information.
88
+
89
+ ### Link rationale while keeping the local contract
90
+
91
+ **Over-trimmed:** "Disposal is documented in the lifecycle design doc."
92
+
93
+ **Balanced:** "Disposal aborts the run and waits for provider quiescence. See the lifecycle design doc for ownership and race handling."
94
+
95
+ **Over-detailed:** Repeating the design doc's promise choreography and rejected ownership models beside every disposer.
96
+
97
+ Keep the behavior and completion guarantee where callers need them. Link aggressively for the algorithm and rationale; a link cannot replace the local contract.
98
+
99
+ ### Shipped decision records retain verification contracts
100
+
101
+ **Over-trimmed:** Deleting the entire verification section because the decision has already shipped.
102
+
103
+ **Balanced:** "Unit tests cover cancellation before and after publication, disposal quiescence, and provider reload. A built-artifact smoke covers the real entry path; recorded-output coverage is deferred because the transport is process-specific."
104
+
105
+ **Over-detailed:** A file-by-file walkthrough of fixtures and assertions with no additional behavioral distinction.
106
+
107
+ Remove migration tasks and test narration. Keep the tiers, the behaviors they pin, the real entry path, and named coverage gaps.
108
+
109
+ ### A security boundary may need one concrete example
110
+
111
+ **Over-trimmed:** "Mounted plugins share the host's authority."
112
+
113
+ **Balanced:** "Mounted plugins share the host's authority; for example, access to a shell service permits commands with the host executor's privileges."
114
+
115
+ **Over-detailed:** A list of every service a plugin could misuse and every hypothetical exploit.
116
+
117
+ Keep one example when it makes an otherwise abstract security limit operationally clear.
118
+
119
+ ### Delete reasoning transcripts entirely
120
+
121
+ **Over-detailed:** "First the loop checks whether the value is absent. If it is absent, the next branch returns early. Otherwise it continues, which is why the final assertion is safe."
122
+
123
+ **Balanced:** No comment when the code already expresses those branches. If the early return protects a non-obvious invariant, state only that invariant.
124
+
125
+ Do not compress a reasoning transcript into shorter narration; remove it.
126
+
127
+ ### Configuration comments explain what the tree cannot
128
+
129
+ **Over-detailed:** "This entry loads the storage provider, followed by the policy component, followed by the read, write, and edit commands," when the adjacent entries already show that order.
130
+
131
+ **Balanced:** "Load policy before the user-facing commands so their write and edit calls pass through the read-before-mutation check."
132
+
133
+ Keep the consequence of order, a surprising scope rule, or a security boundary. Let the configuration show its own inventory.
134
+
135
+ ### Do not trim for word count alone
136
+
137
+ **Current:** "The adapter converts provider errors into the shared error type so callers can handle authentication, rate-limit, and transient failures uniformly."
138
+
139
+ **Shorter but worse:** "The adapter normalizes provider errors."
140
+
141
+ **Balanced decision:** Keep the current sentence unless a link or surrounding contract already lists the failure categories. The shorter version loses the consequence and distinctions without improving structure.
142
+
143
+ ### Model-visible text follows ownership
144
+
145
+ **Over-trimmed:** "The tool returns errors when a call fails."
146
+
147
+ **Over-detailed:** Copying another component's schema and renderer strings into this backend's README.
148
+
149
+ **Balanced:** Quote stable prompt, result, and error text this component owns. Link the generated tool reference for schemas and the consumer README for text another component owns; state only this component's conditions or deltas locally.
150
+
151
+ Wording that reaches a model is behavior, but duplication still drifts. Exactness belongs at the owner.
152
+
153
+ ### Generated summaries must stand alone
154
+
155
+ **Over-trimmed:** "Approval request and policy service." The owner explains policy order and audit logging later, but the generated reference exports only its first sentence.
156
+
157
+ **Over-detailed:** Moving the service's full lifecycle and notification behavior into the extracted sentence.
158
+
159
+ **Balanced:** "Approval service that applies policy before answerers and logs every ask/outcome pair to the requesting session." Keep non-extracted detail in later sentences.
160
+
161
+ Know what the generator extracts. That fragment must preserve the contract needed on its generated surface.
162
+
163
+ ### Limitations are contracts, not debt inventories
164
+
165
+ **Over-trimmed:** Omitting a process-lifetime cache that makes configuration changes require a restart.
166
+
167
+ **Over-detailed:** Listing private helper cleanup and unused test-only accessors with no caller or maintainer consequence.
168
+
169
+ **Balanced:** "Provider selection is cached for the process lifetime; installing or repairing a provider requires a restart." Keep ordinary cleanup in its tracking marker or decision record.
170
+
171
+ Retain gaps and non-obvious constraints that affect use or safe maintenance. A README is not a backlog dump.
172
+
173
+ ## Part 2 — Vantage correction
174
+
175
+ ### Dead citations
176
+
177
+ #### Decision ordinal with a committed owner
178
+
179
+ **Leaked:** "Command input resolves against the visible list (decision 21)."
180
+
181
+ **Fixed:** "Command input resolves against the visible list — the plain-text-reference decision, owned by `docs/decisions/palette-resolution.md`."
182
+
183
+ The ordinal resolves nowhere at the current commit; the decision's name and owning path do. Name the owning path at least once per file — as a link where the surface supports one — and later mentions may use the searchable name alone.
184
+
185
+ #### Decision ordinal without an owner
186
+
187
+ **Leaked:** "The registry rejects duplicate names (decision 7: names are flat, no namespacing)."
188
+
189
+ **Fixed:** "The registry rejects duplicate names; names are flat, with no namespacing."
190
+
191
+ No committed artifact owns "decision 7", so the citation is deleted — but its factual clause (flat names) is restated to stand alone, not deleted with it.
192
+
193
+ #### Audit item codes
194
+
195
+ **Leaked:** "Rendering is pure: same input, same string (audit R3)."
196
+
197
+ **Fixed:** "Rendering is pure: same input, same string."
198
+
199
+ No audit document exists in the repository; the code is session shorthand carrying zero propositions.
200
+
201
+ #### Section numbers of uncommitted drafts
202
+
203
+ **Leaked:** "Layering follows the design (v2 §3.2): `src/core/` is the pure core."
204
+
205
+ **Fixed:** "Layering: `src/core/` is the pure core."
206
+
207
+ A section number of a draft nobody committed is unresolvable. Contrast: "escapes per RFC 9110 §10.1.5" stays — an external standard resolves outside the repository by design, and a committed document that owns its numbering may be cited by section.
208
+
209
+ #### Plan-phase labels
210
+
211
+ **Leaked:** "`src/ui/` is the shell (T4); the P-I migration owns the adapters."
212
+
213
+ **Fixed:** "`src/ui/` is the shell; the adapters live in `src/ui/adapters/`."
214
+
215
+ Phase labels index a plan that never landed. Replace the label with what the phase produced.
216
+
217
+ ### Series and review-thread vantage
218
+
219
+ #### Series position in durable prose
220
+
221
+ **Leaked:** "A future remote backend implements this interface (the sandbox backend is a later change in this series)."
222
+
223
+ **Fixed:** "A remote backend can implement this interface without changing the render layer."
224
+
225
+ Durable prose cannot see the series. Keep the extension-point contract; the pending work's home is the change itself, a tracking marker, or an issue.
226
+
227
+ #### "This change" in a README
228
+
229
+ **Leaked:** "This change adds cursor-based pagination to the item list."
230
+
231
+ **Fixed:** "The item list paginates by cursor."
232
+
233
+ A README outlives every change; state the mechanism as current fact.
234
+
235
+ ### Change narration and version stamps
236
+
237
+ #### War story with a change reference
238
+
239
+ **Leaked:** "Colors used to come from `--surface-*` tokens, which nothing defined, so it always rendered the fallbacks; the alias tokens fixed that (change #88)."
240
+
241
+ **Fixed:** "Colors come from the alias tokens; an undefined token renders the fallbacks."
242
+
243
+ Both live facts survive — the current mechanism and the standing failure behavior — restated in the present. The defect's biography belongs to the change and its decision record.
244
+
245
+ #### Removal narration
246
+
247
+ **Leaked:** "The `legacy` flag is gone with the cleanup; requests ride the single code path now."
248
+
249
+ **Fixed:** "Requests use a single code path."
250
+
251
+ Readers who never saw the flag learn nothing from its absence. "Now" contrasting with a deleted past is a version stamp.
252
+
253
+ #### Fixed regression → counterfactual present
254
+
255
+ **Leaked:** "This used to double-encode multibyte labels."
256
+
257
+ **Fixed:** "Without the byte-length guard, multibyte labels double-encode."
258
+
259
+ The regression pin survives as a present-tense counterfactual that names the guard; "used to" pins it to repository archaeology instead.
260
+
261
+ #### Indexical version stamps
262
+
263
+ **Leaked:** "Batch rendering is synchronous this release; the async path is roadmap work."
264
+
265
+ **Fixed:** "Batch rendering is synchronous." (The deferral lives in `TODO(batch-render):` at the call site.)
266
+
267
+ "This release" / "v1" / "today" go stale the moment they merge. A historical stage name inside a decision record's change-story section is current-state-safe; the indexical form never is.
268
+
269
+ ### Review choreography
270
+
271
+ #### Review verdicts as prose
272
+
273
+ **Leaked:** "Rejected in review: caching the resolved path. We keep resolution per-call."
274
+
275
+ **Fixed (in a decision record's alternatives-considered section):** "**Caching the resolved path.** Rejected: the path depends on the caller's working directory, so a cache keyed by request would serve stale roots."
276
+
277
+ The alternatives-considered genre is the sanctioned home; the reviewer and the round are not part of the rationale.
278
+
279
+ #### Draft ordinals
280
+
281
+ **Leaked:** "As of the fifth revision of this record, the parser also validates manifests."
282
+
283
+ **Fixed:** "The parser validates the manifest."
284
+
285
+ A shipped record states shipped reality; its own revision history lives in version control.
286
+
287
+ ### Reviewer-addressed justification
288
+
289
+ #### Arguing a cast
290
+
291
+ **Leaked:** "The cast is safe — the client constructed the object, it simply doesn't declare the optionals strictly enough."
292
+
293
+ **Fixed:** "The client constructs this object with every optional populated; the declared type is looser than the runtime guarantee."
294
+
295
+ State the invariant a maintainer must not break. "It simply…" answers an objection nobody at the current commit raised. If the invariant is visible in the code, delete the comment instead.
296
+
297
+ #### Appeal to review authority
298
+
299
+ **Leaked:** "This is correct because the reviewer confirmed the wrapping order."
300
+
301
+ **Fixed:** (deleted; the wrapping order is stated in the function's return documentation.)
302
+
303
+ Correctness claims cite invariants or tests, never people.
304
+
305
+ ### Restatement and derivation
306
+
307
+ #### Control-flow narration
308
+
309
+ **Leaked:** "First we normalize the label, then we truncate it, then we wrap it."
310
+
311
+ **Fixed:** (deleted.)
312
+
313
+ The three lines below the comment say the same thing in code.
314
+
315
+ #### Test walkthrough
316
+
317
+ **Leaked:** "This test creates a client, sends two requests, waits for the second reply, and then asserts the log has four entries."
318
+
319
+ **Fixed:** "Two round-trips must produce exactly four log entries — the projection dedupes the shared prefix."
320
+
321
+ Keep only the non-obvious assertion rationale; the walkthrough restates the test body.
322
+
323
+ ### Hedges and planning residue
324
+
325
+ #### Unmarked deferral
326
+
327
+ **Leaked:** "Probably fine to render eagerly for now."
328
+
329
+ **Fixed:** (deleted; the deferral already has its `TODO(batch-render):` marker.)
330
+
331
+ A hedge without an owner is planning residue. If no marker exists, write one (`TODO(batch-render): coalesce per animation frame`) instead of keeping the hedge.
332
+
333
+ #### Vague sizing
334
+
335
+ **Leaked:** "A 64 KiB buffer should be enough for most cases."
336
+
337
+ **Fixed:** "64 KiB holds the largest observed frame (48 KiB) with headroom; a larger frame fails loudly in the decoder."
338
+
339
+ Replace the hedge with the actual bound and the failure behavior when it is exceeded.
340
+
341
+ ### Authoring-language slips
342
+
343
+ **Leaked:** "The renderer runs on the client 端; see the 设计稿 for spacing. ---- 私有 ----"
344
+
345
+ **Fixed:** "The renderer runs on the client side; spacing follows the design-tool frame `item-badges`."
346
+
347
+ Working-language fragments and session separators are transcription residue. The design-tool frame name stays: external provenance that resolves outside the repository by design.
348
+
349
+ ### Keeps
350
+
351
+ #### Issue references are durable on every surface
352
+
353
+ **Keep:** "The cap applies to the complete rendered value, wrappers included (issue #1470 owns the follow-up)."
354
+
355
+ An unaided pass deleted this, reasoning that issue citations belong in decision records. Wrong direction: issues resolve at the current commit from any surface, and "#N owns the follow-up" is the sanctioned home for deferred work in a README. What decision records and incident reports additionally sanction is citing *merged changes* as evidence.
356
+
357
+ #### Dead name-drops are not "naming the owner"
358
+
359
+ **Delete:** "Badge renderer over the widget interface (see the rendering design doc)."
360
+
361
+ An unaided pass kept this as "naming the owning document by topic". The test is resolvability, not form: if no committed file answers to "the rendering design doc", the pointer is dead. Retarget it to the committed owner if one exists; otherwise delete it.
362
+
363
+ #### Suppression justifications
364
+
365
+ **Keep (after fixing):** a linter suppression comment whose trailing reason reads "the one-element literal guarantees index 0."
366
+
367
+ The justification clause is required prose. When the stated reason is false — the original claimed "the loop guard above proves a frame exists" with no loop in sight — fix the reason; never delete it.
368
+
369
+ #### Measured bounds
370
+
371
+ **Keep:** "Depth cap (measured: 512 nests ≈ 0.15s synchronous; 4096 blocks the loop)."
372
+
373
+ The measurement pins the constant against uninformed retuning, and "measured" is the provenance that distinguishes data from a guess.
374
+
375
+ #### Runtime old/new is not change history
376
+
377
+ **Keep:** "The old connection drains before the new one accepts."
378
+
379
+ "Old" and "new" here name two live runtime objects during handover, not repository states. The change-narration ban is about repository history, not lifecycle vocabulary.
380
+
381
+ ## Part 3 — Overcorrection traps
382
+
383
+ Enumerate a passage's propositions before trimming it.
384
+
385
+ ### Flipping an obligation into an endorsement
386
+
387
+ **Original:** "These direct registrations are exceptions pending migration to the registry API."
388
+
389
+ **Overcorrected:** "These direct registrations are sanctioned exceptions."
390
+
391
+ **Right:** "These direct registrations are exceptions pending migration to the registry API."
392
+
393
+ "Pending migration" is an obligation; "sanctioned" blesses the status quo. The trim inverted the sentence's modality while shortening it.
394
+
395
+ ### Promoting a hypothetical to a shipped feature
396
+
397
+ **Original:** "A future IPC transport subclasses the executor and overrides `send`."
398
+
399
+ **Overcorrected:** "An IPC transport subclasses the executor and overrides `send`."
400
+
401
+ **Right:** "A hypothetical IPC transport — no such transport exists — would subclass the executor and override `send`."
402
+
403
+ Deleting the future-marker alone turns a design illustration into a claim that the class ships. Mark the hypothetical explicitly instead of just unmarking the future.
404
+
405
+ ### Deleting a true fact with the transcript around it
406
+
407
+ **Original:** "The check notice narrates the validation order; the notice text is also what the documentation type check compiles against."
408
+
409
+ **Overcorrected:** (whole sentence deleted as narration.)
410
+
411
+ **Right:** "The notice text is what the documentation type check compiles against."
412
+
413
+ Half the sentence was narration; the other half was a load-bearing coupling. Delete clauses, not sentences, when propositions share a line.
414
+
415
+ ### Dropping provenance while keeping the number
416
+
417
+ **Original:** "The 4 MiB ceiling is measured: the largest generated type module is 3.1 MiB."
418
+
419
+ **Overcorrected:** "The ceiling is 4 MiB; the largest generated type module is 3.1 MiB."
420
+
421
+ **Right:** keep "measured".
422
+
423
+ Without "measured" the 3.1 MiB reads as a definition rather than an observation, and nobody re-measures before raising the ceiling.
@@ -0,0 +1,150 @@
1
+ # Capability detection and generic probes
2
+
3
+ Detection reads host configuration; it never runs a command to test whether that command exists. A failing invocation is ambiguous — absent, broken, or unauthorized — and speculative execution in an unfamiliar repository is unsafe.
4
+
5
+ Each capability below lists **where to look**, the **generic fallback** when it is absent, and what that fallback **cannot** establish. Report an ambiguous detection as uncovered.
6
+
7
+ ## Where to look
8
+
9
+ Read whichever of these the host has, then map what you find onto the table below:
10
+
11
+ - package or project manifests and their script/task definitions
12
+ - build, task, and CI configuration
13
+ - documentation-tooling configuration
14
+ - contributor and agent instruction files
15
+ - the repository tree itself (a `docs/` layout, a decision-record directory, an archive directory)
16
+
17
+ ## Reference and link checking
18
+
19
+ **Present when** a script or CI step validates documentation links, or a documentation generator fails on a dead link.
20
+
21
+ **Generic fallback** — extract relative targets and test existence:
22
+
23
+ ```sh
24
+ git ls-files '*.md' \
25
+ | xargs grep -oE '\]\([^)#][^)]*\)' \
26
+ | sed 's/](\(.*\))/\1/'
27
+ ```
28
+
29
+ Resolve each target against its containing file's directory and check that the path exists.
30
+
31
+ **Cannot establish:** anchor validity. A `#fragment` onto a heading requires the host's slug algorithm, which differs between renderers. Report anchor validity as uncovered whenever the fallback is in use.
32
+
33
+ ## Document size and budgets
34
+
35
+ **Present when** a manifest declares per-document limits, or a check rejects an oversized document.
36
+
37
+ **Generic fallback** — rank by size to find outliers:
38
+
39
+ ```sh
40
+ git ls-files '*.md' | xargs wc -w | sort -rn | head -30
41
+ ```
42
+
43
+ **Cannot establish:** any threshold. Ranking finds candidates; it does not decide that a document is too long. State explicitly that no limit was enforced.
44
+
45
+ ## Generated documentation artifacts
46
+
47
+ **Present when** a generator writes documentation files and a check regenerates them to compare, or generated files carry a do-not-edit marker.
48
+
49
+ **Generic fallback** — none that is sound. Without knowing which files are generated, a scan cannot distinguish a generated file from an authored one.
50
+
51
+ **Consequence:** report the derivative-artifact rules as not applicable. Do not guess that a file is generated from its content.
52
+
53
+ ## Translation pairing
54
+
55
+ **Present when** the repository holds sibling documents per language plus a consistency record, or a check reports unpaired or out-of-sync documents.
56
+
57
+ **Generic fallback** — find sibling-language candidates:
58
+
59
+ ```sh
60
+ git ls-files '*.md' | sed -E 's/\.[a-z]{2}(-[A-Z]{2})?\.md$/.md/' | sort | uniq -d
61
+ ```
62
+
63
+ **Cannot establish:** whether a pair is *consistent*. That needs the host's recorded hashes or an equivalent. Report pairing consistency as uncovered.
64
+
65
+ ## Decision records
66
+
67
+ **Present when** the repository has a directory of numbered or dated decision documents, or an instruction file describing when a decision earns a record.
68
+
69
+ **Generic fallback** — locate candidate directories:
70
+
71
+ ```sh
72
+ git ls-files | grep -iE '(adr|rfc|decision|design-doc)' | head -20
73
+ ```
74
+
75
+ **Consequence when absent:** escalating a behavior-changing removal has no destination. Require the user to name one; do not delete the passage and do not invent a directory.
76
+
77
+ ## Frozen archives
78
+
79
+ **Present when** a directory holds historical records excluded from ordinary maintenance, usually with its own instruction file or a seal/hash record.
80
+
81
+ **Generic fallback** — none. An archive convention is declared, not inferred.
82
+
83
+ **Consequence:** no archive exclusion applies. Say so, since a host that *does* freeze history without declaring it would be edited by mistake.
84
+
85
+ ## Aggregate documentation gate
86
+
87
+ **Present when** one script or CI job runs the documentation checks together.
88
+
89
+ **Generic fallback** — the version-control formatting check only:
90
+
91
+ ```sh
92
+ git diff --check
93
+ ```
94
+
95
+ **Cannot establish:** anything the host's own checks would. Report validation as formatting-only.
96
+
97
+ ## Changed scope
98
+
99
+ Needed by any audit that judges only what a change touched.
100
+
101
+ **A base reference is required.** Never guess one and never fetch one.
102
+
103
+ ```sh
104
+ # committed paths relative to the merge base
105
+ git diff --name-only "$(git merge-base HEAD <base-ref>)"...HEAD
106
+
107
+ # working-tree state
108
+ git diff --name-only # unstaged
109
+ git diff --name-only --cached # staged
110
+ git ls-files --others --exclude-standard # untracked
111
+ ```
112
+
113
+ After the base moves, rerun this and audit prose introduced by the new base.
114
+
115
+ **Cannot establish:** which of those paths are *in scope* for prose review. Filter by the exclusion categories below.
116
+
117
+ ## Resolving exclusion categories
118
+
119
+ Map each category onto the host's actual paths, then place every exclusion **after** the inclusions so a later include cannot re-admit it.
120
+
121
+ | Category | How to find it |
122
+ |---|---|
123
+ | Vendored / third-party source | A directory of pinned upstream copies, often with a manifest of upstream revisions |
124
+ | Dependency directories | The package manager's install directory |
125
+ | Frozen archives | The declared archive directory, if the host has one |
126
+ | Recorded fixtures and snapshots | Test directories holding recorded expected output |
127
+ | This skill's own directory | The directory containing this file |
128
+
129
+ Ordering with ripgrep and Git:
130
+
131
+ ```sh
132
+ rg -n --hidden 'pattern' \
133
+ --glob '!<vendored>/**' \
134
+ --glob '!<dependencies>/**' \
135
+ --glob '!<archive>/**' \
136
+ --glob '!<snapshots>/**' \
137
+ --glob '!<this-skill>/**'
138
+
139
+ git ls-files '*.md' ':(exclude)<vendored>/**' ':(exclude)<archive>/**'
140
+ ```
141
+
142
+ Add `--hidden` when a category lives under a dot-directory; ripgrep skips those by default, and instruction or record trees are commonly hidden. Do not follow a symbolic link into an excluded tree.
143
+
144
+ Before reporting, confirm the final change set contains no excluded path:
145
+
146
+ ```sh
147
+ git diff --name-only HEAD
148
+ ```
149
+
150
+ Report an accidental match rather than claiming a clean exclusion history.
@@ -0,0 +1,66 @@
1
+ # Recall batteries
2
+
3
+ Search probes for the leakage taxonomy. **Every hit needs semantic judgment.** The batteries over-match by design, and they under-match by nature — pair them with an unpatterned read of the densest prose in scope (module documentation, READMEs, decision records).
4
+
5
+ ## Invocation rules
6
+
7
+ - **Search hidden paths.** Add `--hidden --glob '!.git/**'` when instruction files, decision records, or agent notes live under dot-directories; ripgrep skips those by default, and hidden record trees are the easiest place to miss leakage.
8
+ - **Exclusions go last** so a later include cannot re-admit them. Resolve the categories against the host project and append each as a glob: vendored source, dependency directories, frozen archives, recorded fixtures and snapshots, and this skill's own directory (its calibration files quote flawed wording deliberately).
9
+ - **Case sensitivity differs by line.** Natural-language patterns take `-i` so sentence-initial capitals hit ("This change adds…", "Probably fine…"). The code-shorthand pattern stays case-sensitive: `-i` would turn `\bT\d\b` and `\bP-I\b` into noise.
10
+ - **A zero-hit pattern proves nothing until you have seen it match.** Test it against a known-positive string before trusting the negative. Every pattern below matches at least one line of the calibration examples, which is how to check that a pattern still works.
11
+
12
+ ## English battery
13
+
14
+ Append the resolved exclusion globs to each line.
15
+
16
+ ```sh
17
+ # 1. Dead design-session citations (case-sensitive)
18
+ rg -n --hidden '\(decision \d|\(audit [A-Z]\d|design §|plan §|design ledger|\bP-I\b|\bW\d\b|\bT\d\b'
19
+
20
+ # 2. Series and review-thread vantage
21
+ rg -n --hidden -i 'this change|this branch|this series|later change|previous commit|this commit'
22
+
23
+ # 3. Change narration
24
+ rg -n --hidden -i 'used to |no longer|previously|the old |was renamed|was moved'
25
+
26
+ # 4. Indexical version stamps
27
+ rg -n --hidden -i '\bv1\b|this release|this cut|\btoday\b|\bfor now\b|roadmap'
28
+
29
+ # 5. Review choreography
30
+ rg -n --hidden -i 'rejected in review|review round|reviewer|as of v\d|revision of this'
31
+
32
+ # 6. Hedges and reviewer-addressed justification
33
+ rg -n --hidden -i 'probably |should be enough|should suffice|it simply|is safe —|is safe --'
34
+
35
+ # 7. Section numbers
36
+ rg -n --hidden '§\d'
37
+ ```
38
+
39
+ ## Chinese battery
40
+
41
+ For prose whose primary language is Chinese, or to catch working-language slips in prose that is otherwise not.
42
+
43
+ ```sh
44
+ rg -n --hidden '设计稿|评审|上一?轮|旧版|老的|不再|以前|本版|遗留|私有'
45
+
46
+ # Single-character slip: the bare 端 where "side" or "client" belongs
47
+ rg -n --hidden '(^|[^a-zA-Z])端([^a-zA-Z]|$)' --glob '*.md'
48
+ ```
49
+
50
+ ## Known false-positive families
51
+
52
+ Expect each of these; judge and keep them.
53
+
54
+ - **Instrumental "used to"** — "the key used to sign requests" is instrumental, not temporal. The temporal form has a subject state before it ("colors used to come from…").
55
+ - **Runtime old/new** — "the old connection drains before the new one accepts" names live objects during handover, not repository states.
56
+ - **"This change" in process documentation** — documentation *about* review workflow ("the change description should…", templates, contributor guides) legitimately says "change"; the ban is on a document adopting one change's vantage about the code.
57
+ - **`v1` as a protocol or path segment** — `/v1/items` endpoints and wire-format names are identifiers, not version stamps.
58
+ - **`§N` with a committed owner** — external standards (RFC 9110 §10.1.5) and committed documents that own their section numbering stay citable by section.
59
+ - **Contrastive "actually" and the noun "wait"** — ordinary English, not hedging. No pattern above probes them; they surface only if you extend the hedging line.
60
+ - **"Today" in generated timestamps and sample output** — recorded output keeps its voice.
61
+ - **Versioned-artifact Chinese** — 本版本 is a legitimate rendering of "this release" where a release is the subject; the banned indexical is the bare 本版 stamp.
62
+ - **Alternatives-considered sections** — "rejected" inside a decision record's genre slot is the sanctioned home, not review choreography.
63
+
64
+ ## After the audit
65
+
66
+ Re-run the batteries and expect only sanctioned keeps, this skill's own directory, and quoted evidence inside decision records. Confirm every remaining citation resolves at the current commit, then run the host's detected checks.
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAiIhD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqMnE"}
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoKhD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsNnE"}
@@ -10,6 +10,7 @@ import { composeOpenspecConfig } from './templates/openspec-config.js';
10
10
  import { composeDesignMdSkill } from './templates/design-md-skill.js';
11
11
  import { composeFuseReviewSkill } from './templates/fusereview-skill.js';
12
12
  import { composeFuseQASkill } from './templates/fuseqa-skill.js';
13
+ import { composeFuseDocSkill } from './templates/fusedoc-skill.js';
13
14
  import { composeCLAUDEmd } from './templates/claude-md.js';
14
15
  import { createDir, writeText, writeJSON, writeYAML } from './utils/fs.js';
15
16
  import { gitInit, gitInitialCommit } from './utils/git.js';
@@ -36,6 +37,10 @@ async function trustDirectory(absPath) {
36
37
  catch {
37
38
  // file missing or malformed — start fresh
38
39
  }
40
+ // `if (!…)`, not `??=`: this tolerated any falsy value (a parseable but
41
+ // malformed file) before the type narrowing, and `??=` fires only on
42
+ // null/undefined — substituting it silently dropped the self-heal for
43
+ // `projects: 0`, and then threw assigning a property on a number.
39
44
  if (!data.projects)
40
45
  data.projects = {};
41
46
  if (!data.projects[absPath])
@@ -85,10 +90,18 @@ function mergeGitignore(existing, generated) {
85
90
  return existing.trimEnd() + '\n\n# Added by specfuse\n' + newLines.join('\n') + '\n';
86
91
  }
87
92
  function mergeClaudeSettings(existing, generated) {
88
- const existingPerms = existing?.permissions?.allow ?? [];
89
- const generatedPerms = generated?.permissions?.allow ?? [];
90
- const merged = [...new Set([...existingPerms, ...generatedPerms])];
91
- return { ...existing, permissions: { ...existing?.permissions, allow: merged } };
93
+ const existingSettings = existing;
94
+ const generatedSettings = generated;
95
+ const merged = [
96
+ ...new Set([
97
+ ...(existingSettings.permissions?.allow ?? []),
98
+ ...(generatedSettings.permissions?.allow ?? []),
99
+ ]),
100
+ ];
101
+ return {
102
+ ...existing,
103
+ permissions: { ...existingSettings.permissions, allow: merged },
104
+ };
92
105
  }
93
106
  /**
94
107
  * Copy every file in a template directory. Deliberately unfiltered: template
@@ -192,11 +205,23 @@ export async function scaffold(config) {
192
205
  await createDir(path.join(targetDir, '.claude', 'skills', 'fuseqa'));
193
206
  await writeText(fuseqaSkillPath, composeFuseQASkill(ctx));
194
207
  }
208
+ // FuseDoc skill
209
+ spinner.text = 'Writing .claude/skills/fusedoc/SKILL.md...';
210
+ const fusedocSkillPath = path.join(targetDir, '.claude', 'skills', 'fusedoc', 'SKILL.md');
211
+ const existingFusedocSkill = await readTextSafe(fusedocSkillPath);
212
+ if (!existingFusedocSkill) {
213
+ await createDir(path.join(targetDir, '.claude', 'skills', 'fusedoc'));
214
+ await writeText(fusedocSkillPath, composeFuseDocSkill());
215
+ }
195
216
  // Skill templates
196
217
  spinner.text = 'Copying skill templates...';
197
218
  await copyTemplateDir(path.join(import.meta.dirname, 'design-md', 'templates'), path.join(targetDir, '.claude', 'skills', 'design-md', 'templates'));
198
219
  await copyTemplateDir(path.join(import.meta.dirname, 'fuseqa', 'templates'), path.join(targetDir, '.claude', 'skills', 'fuseqa', 'templates'));
199
- spinner.succeed('Installed design-md and fuseqa skills with templates');
220
+ // The source directory is named templates/ rather than references/ because the
221
+ // build script copies only src/*/templates into dist; the skill links to
222
+ // references/, so the copy renames it at the destination.
223
+ await copyTemplateDir(path.join(import.meta.dirname, 'fusedoc', 'templates'), path.join(targetDir, '.claude', 'skills', 'fusedoc', 'references'));
224
+ spinner.succeed('Installed design-md, fusedoc and fuseqa skills with templates');
200
225
  // OpenSpec
201
226
  if (config.initOpenspec) {
202
227
  spinner.text = 'Setting up OpenSpec...';
@@ -257,6 +282,7 @@ export async function scaffold(config) {
257
282
  console.log(` CLAUDE.md ${chalk.dim(tag('Bridge declaration'))}`);
258
283
  console.log(` .gitignore ${chalk.dim(tag('Shared ignore patterns'))}`);
259
284
  console.log(` .claude/settings.local.json ${chalk.dim(tag('Permissions'))}`);
285
+ console.log(` .claude/skills/fusedoc/ ${chalk.dim('Documentation standard')}`);
260
286
  if (config.initOpenspec) {
261
287
  console.log(` openspec/config.yaml ${chalk.dim('Spec-driven config')}`);
262
288
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import type { TemplateContext } from "../types.js";
2
+ export declare function renderApplyPhase(): string;
2
3
  export declare function renderApplyFuseReview(): string;
3
4
  export declare function renderFuseQA(): string;
5
+ export declare function renderFuseDocStandard(): string;
4
6
  export declare function renderVerifyPhase(): string;
5
- export declare function composeCLAUDEmd(ctx: TemplateContext): string;
7
+ export declare function composeCLAUDEmd(_ctx: TemplateContext): string;
6
8
  //# sourceMappingURL=claude-md.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiJnD,wBAAgB,qBAAqB,IAAI,MAAM,CAyB9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CA+BrC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAaD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAkC5D"}
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyFnD,wBAAgB,gBAAgB,IAAI,MAAM,CA0DzC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CA2B9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CA+BrC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAY9C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAoC7D"}
@@ -31,7 +31,9 @@ When \`/opsx:propose\` is invoked:
31
31
  - **If the three-gate test (see DESIGN-TOKENS.md Generation Rules above) triggers:** MUST invoke \`/design-md\` skill NOW (before generating artifacts). For weak intent, state that visual design was not discussed in brainstorming before running the questionnaire. Complete the questionnaire → generate DESIGN-TOKENS.md → THEN proceed.
32
32
  - Only after human confirms the approach, generate ALL artifacts (proposal -> design -> specs -> tasks) in one pass.
33
33
 
34
- 2. Every proposal artifact MUST contain:
34
+ 2. **Prose in the artifacts follows the FuseDoc standard** (see Documentation Standard above). Invoke \`/fusedoc\` when drafting or revising artifact prose; it owns the rules, this file does not restate them.
35
+
36
+ 3. Every proposal artifact MUST contain:
35
37
  - **Non-goals** section (what this change explicitly does NOT do)
36
38
  - **Trade-offs** section (alternatives considered and why they were rejected)
37
39
  - **Verification strategy** (how we know this change works)`;
@@ -56,6 +58,7 @@ When \`/opsx:new\` is invoked:
56
58
  - For **design** artifacts: MUST include dependency diagram, public API surface, error handling strategy.
57
59
  - For **specs** artifacts: each spec must be independently testable with success + failure behaviors.
58
60
  - For **tasks** artifacts: enforce TDD order, max 2-hour chunks, verification commands per task.
61
+ - **Prose in every artifact follows the FuseDoc standard** (see Documentation Standard above). Invoke \`/fusedoc\` when drafting or revising it; the skill owns the rules, this file does not restate them.
59
62
  - After drafting each artifact, STOP and wait for user review before advancing.
60
63
 
61
64
  4. **Pace control: one artifact per \`/opsx:continue\` invocation.**
@@ -77,18 +80,19 @@ When \`/opsx:explore\` is invoked:
77
80
  - Exploration involves modifying existing code to validate hypotheses
78
81
  Discarding a worktree costs zero — prevents exploration artifacts from polluting the main branch.`;
79
82
  }
80
- function renderApplyPhase() {
83
+ export function renderApplyPhase() {
81
84
  return `### Phase 2: Apply / Implement
82
85
 
83
86
  When \`/opsx:apply\` is invoked:
84
87
 
85
88
  0. **Model Switch Checkpoint (模型切换节拍)**
86
89
  - 进入实施阶段前,AI MUST 使用 AskUserQuestion 工具询问用户是否切换模型。
87
- - 选项设置:
90
+ - 选项设置(MUST 提供 2–4 项:options 少于 2 项会被工具拒绝入参):
88
91
  - 选项 1: "继续使用当前模型"(描述:不切换,直接开始实施)
92
+ - 选项 2: "切换模型"(描述:我需要在实施前换一个模型)
89
93
  - Other 输入框提示:"输入切换命令,如 /model sonnet、/model glm、/model ds"
90
94
  - 如果用户选择 "继续使用当前模型",直接进入步骤 1。
91
- - 如果用户通过 Other 输入了模型名称,AI 提示用户手动执行 \`/model <name>\` 命令,然后重新执行 \`/opsx:apply\` 以从步骤 1 开始。AI 此时 MUST 停止,不继续执行后续步骤。
95
+ - 如果用户选择 "切换模型" 或通过 Other 输入了模型名称,AI 提示用户手动执行 \`/model <name>\` 命令,然后重新执行 \`/opsx:apply\` 以从步骤 1 开始。AI 此时 MUST 停止,不继续执行后续步骤。
92
96
  - 此步骤不可跳过,必须等待用户明确选择后才执行后续步骤。
93
97
 
94
98
  1. **MUST activate Superpowers \`test-driven-development\` as a pre-requisite skill.**
@@ -150,6 +154,8 @@ FuseReview is the fourth beat: Think reviews direction, Do produces code, **Fuse
150
154
 
151
155
  **If the user declines:** record the skip decision in the apply completion report together with the change facts (task count, subagent usage, modules), so the skip is auditable rather than invisible.
152
156
 
157
+ **Prose changes use the FuseDoc standard:** when the reviewed diff changes prose — docs, comments, READMEs, diagnostics — apply the FuseDoc standard (see Documentation Standard above) alongside the review method. The skill owns the rules; this file does not restate them.
158
+
153
159
  **Handling findings:**
154
160
  - **Blocking** findings are fixed test-first: write the failing test that catches the defect, then fix.
155
161
  - **Suggestions** are recorded in the apply completion report without enforcement.
@@ -193,6 +199,19 @@ FuseQA is the fifth beat: Think reviews direction, Do produces code, FuseReview
193
199
 
194
200
  **Manual invocation:** the user may invoke the FuseQA skill explicitly at any time, independent of the checkpoint.`;
195
201
  }
202
+ export function renderFuseDocStandard() {
203
+ return `### Documentation Standard: FuseDoc
204
+
205
+ FuseDoc is a **documentation standard spanning the pipeline**, not a pipeline beat. It has no checkpoint, no mandatory question, and no position in the apply exit sequence — invoke it on demand from any phase, or manually at any time.
206
+
207
+ The standard lives at \`.claude/skills/fusedoc/SKILL.md\`. It governs three things about any prose this project produces or reviews: what a passage must state, whether it reads from the repository or from an authoring session, and where a fact belongs. The skill owns the rules; this file only points at it.
208
+
209
+ **Where it applies:** whenever a phase writes or reviews prose — proposal, design and specs artifacts, \`CLAUDE.md\`, READMEs, code comments, diagnostics, visible strings. FuseReview applies it when a reviewed diff changes prose. The archive step applies it when syncing specs into \`openspec/specs/\`.
210
+
211
+ **How to invoke:**\n\n\`\`\`\n/fusedoc <scope>\n\`\`\`
212
+
213
+ Scope is required. An invocation naming no scope reports the missing input rather than inferring a repository-wide one.`;
214
+ }
196
215
  export function renderVerifyPhase() {
197
216
  return `### Phase 3: Verify / Archive
198
217
 
@@ -200,7 +219,9 @@ Before \`/opsx:archive\`:
200
219
 
201
220
  1. Run \`/opsx:verify\` to validate implementation matches all specs
202
221
  2. Run the project's full test suite and paste evidence — this run **is the E2E regression gate**: the suite includes every case under \`tests/e2e/\`, and this gate MUST NOT be skipped
203
- 3. Run the project's linter with zero warnings`;
222
+ 3. Run the project's linter with zero warnings
223
+
224
+ Prose synced into \`openspec/specs/\` follows the FuseDoc standard (see Documentation Standard above). Invoke \`/fusedoc\` on the synced text; the skill owns the rules, this file does not restate them.`;
204
225
  }
205
226
  function renderGeneralRules() {
206
227
  return `### General Rules
@@ -212,7 +233,11 @@ function renderGeneralRules() {
212
233
  - **Fail loud, fail early.** Prefer compile-time errors over runtime surprises.
213
234
  - **Dependencies flow inward.** Domain logic never imports infrastructure.`;
214
235
  }
215
- export function composeCLAUDEmd(ctx) {
236
+ // The context parameter is retained but unread: none of the sections below
237
+ // interpolate it, and it is part of the exported signature the scaffolder and
238
+ // the tests call uniformly across the compose* family. Underscored to say
239
+ // "deliberately unused" rather than removed, which would break those callers.
240
+ export function composeCLAUDEmd(_ctx) {
216
241
  const sections = [
217
242
  `# Project CLAUDE.md`,
218
243
  "",
@@ -228,6 +253,8 @@ export function composeCLAUDEmd(ctx) {
228
253
  "This project enforces a fused OpenSpec + Superpowers engineering pipeline.",
229
254
  "AI agents MUST follow these rules without exception.",
230
255
  "",
256
+ renderFuseDocStandard(),
257
+ "",
231
258
  renderPathA(),
232
259
  "",
233
260
  renderPathB(),
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAEA,SAAS,sBAAsB;IAC7B,OAAO;;iCAEwB,CAAC;AAClC,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;oJAa2I,CAAC;AACrJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;+DAcsD,CAAC;AAChE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;4EAuBmE,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;qGAY4F,CAAC;AACtG,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAuDuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;uHAuB8G,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mHA6B0G,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;+CAMsC,CAAC;AAChD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;2EAOkE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,QAAQ,GAAG;QACf,qBAAqB;QACrB,EAAE;QACF,sBAAsB,EAAE;QACxB,EAAE;QACF,uBAAuB,EAAE;QACzB,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB;QACvB,0DAA0D;QAC1D,EAAE;QACF,4EAA4E;QAC5E,sDAAsD;QACtD,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,gBAAgB,EAAE;QAClB,EAAE;QACF,qBAAqB,EAAE;QACvB,EAAE;QACF,YAAY,EAAE;QACd,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,kBAAkB,EAAE;QACpB,qBAAqB;KACtB,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAEA,SAAS,sBAAsB;IAC7B,OAAO;;iCAEwB,CAAC;AAClC,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;oJAa2I,CAAC;AACrJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;+DAgBsD,CAAC;AAChE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;4EAwBmE,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;qGAY4F,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAwDuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;uHAyB8G,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mHA6B0G,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;wHAU+G,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;0MAQiM,CAAC;AAC3M,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;2EAOkE,CAAC;AAC5E,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,IAAqB;IACnD,MAAM,QAAQ,GAAG;QACf,qBAAqB;QACrB,EAAE;QACF,sBAAsB,EAAE;QACxB,EAAE;QACF,uBAAuB,EAAE;QACzB,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB;QACvB,0DAA0D;QAC1D,EAAE;QACF,4EAA4E;QAC5E,sDAAsD;QACtD,EAAE;QACF,qBAAqB,EAAE;QACvB,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,gBAAgB,EAAE;QAClB,EAAE;QACF,qBAAqB,EAAE;QACvB,EAAE;QACF,YAAY,EAAE;QACd,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,kBAAkB,EAAE;QACpB,qBAAqB;KACtB,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function composeFuseDocSkill(): string;
2
+ //# sourceMappingURL=fusedoc-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fusedoc-skill.d.ts","sourceRoot":"","sources":["../../src/templates/fusedoc-skill.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,IAAI,MAAM,CAqR5C"}
@@ -0,0 +1,279 @@
1
+ export function composeFuseDocSkill() {
2
+ return `---
3
+ name: fusedoc
4
+ description: Use when writing, reviewing, auditing, trimming, or relocating prose — Markdown docs, code comments, API documentation, READMEs, decision records, prompts, tool descriptions, diagnostics, visible strings. Decides what a passage must state, what may be deleted, whether it reads as a leaked reasoning transcript, and where a fact belongs. Also for "improve the docs", "audit the docs", "where should this be documented", "this doc is too long", "this comment reads like notes-to-self".
5
+ ---
6
+
7
+ # FuseDoc — prose, vantage, and placement
8
+
9
+ Write enough to preserve the contract, then remove reasoning transcripts, repetition, and decoration. A **contract** is an obligation, invariant, precondition, postcondition, or compatibility promise that a caller, callee, implementer, producer, or consumer relies on.
10
+
11
+ **This is guidance, not a script.** Use judgment beyond the named checks; documented requirements still apply. Length alone is never a defect.
12
+
13
+ Three axes, each owning its rules: [§2 proposition judgment](#2-axis--proposition-judgment) (what a passage must say), [§3 vantage correction](#3-axis--vantage-correction) (whether it reads from the repository or from an authoring session), [§4 structural placement](#4-axis--structural-placement) (where the fact belongs, and at what detail).
14
+
15
+ ## 0. Inputs, detection, exclusions
16
+
17
+ ### Inputs
18
+
19
+ **\`scope\` is required.** If the invocation names no scope, report the missing input and stop — do not infer a repository-wide scope and do not begin an interview.
20
+
21
+ **\`mode\`** is \`automatic\` (default) or \`interactive\`. It controls *questions only*. Write authority comes from the task instead: review and audit tasks report findings and edit nothing; only an explicitly authorized write, fix, or trim task applies changes.
22
+
23
+ ### Host capability detection (run before any judgment)
24
+
25
+ Several rules below apply only when the host project has the corresponding facility. Detect all of them **first**, in one pass, so the final report can name every dimension left uncovered. Read the host's manifests, script definitions, and configuration files — **do not run a command to see whether it exists**: a failure is ambiguous (absent, broken, or unauthorized), and speculative execution in an unfamiliar repository is unsafe.
26
+
27
+ **Two capabilities are present by construction in a SpecFuse-scaffolded project.** Treat these as known; do not probe for them:
28
+
29
+ | Capability | Where it lives here | What it enables |
30
+ |---|---|---|
31
+ | Decision-record convention | \`openspec/changes/<name>/\` — proposal and design own the rationale | Escalation destination (§4); record coverage (§2) |
32
+ | Frozen-archive convention | \`openspec/changes/archive/**\` | The archive exclusion (§0) |
33
+
34
+ Detect the rest. Detection commands and generic fallbacks: [references/probes.md](references/probes.md).
35
+
36
+ | Capability | What it enables | Absent → |
37
+ |---|---|---|
38
+ | Reference/link checker | Rename and move safety (§4) | Generic reference probe; report anchor validity as uncovered |
39
+ | Document size or budget mechanism | The size policy (§4) | Measure and rank; assert no threshold |
40
+ | Generated documentation artifacts + freshness check | Derivative-artifact rules (§2) | Report those rules as not applicable |
41
+ | Translation pairing contract | Paired-home cost (§4); counterpart repair (§3) | Report as not applicable |
42
+ | Aggregate documentation gate | Validation (§5) | Report validation as version-control formatting only |
43
+
44
+ Record ambiguity as *uncovered*, never as present.
45
+
46
+ ### Exclusions
47
+
48
+ Resolve these **categories** against the host project; never assume a path:
49
+
50
+ - vendored or third-party source trees
51
+ - dependency directories
52
+ - frozen archives of historical records
53
+ - recorded fixtures and snapshots — recorded output keeps its original voice
54
+ - **this skill's own directory** — \`.claude/skills/fusedoc/\` — its calibration material quotes flawed prose deliberately
55
+
56
+ Put exclusion arguments **after** inclusion arguments so a later include cannot re-admit an excluded path. Do not follow a symbolic link into an excluded tree. Inspect an archived record only to understand an inbound citation — never to modernize its prose or its outbound links. Before reporting, verify the final change set contains no excluded path; report an accidental match rather than claiming a clean exclusion history.
57
+
58
+ ## 1. Task navigation
59
+
60
+ Each entry routes; the rules live in §2–§4.
61
+
62
+ **Write new prose.** Set structure first ([§4 structural review](#structural-review-precedes-prose)), then satisfy required coverage for the location ([§2 coverage](#required-coverage-by-prose-location)). Check the result against the resolvability test ([§3](#the-one-test)) before finishing.
63
+
64
+ **Review or edit existing prose.** Enumerate propositions before touching anything ([§2 proposition rule](#preserve-the-complete-proposition)), then check vantage ([§3 taxonomy](#taxonomy)) and the overcorrection traps ([§3](#overcorrection-traps)). Classify each passage and report ([§5](#5-report-and-validation)).
65
+
66
+ **Audit a corpus.** Follow the ordered probe sequence ([§4 audit](#corpus-audit-cheapest-probe-first)), which delegates leakage hunting to §3's batteries. Escalate any removal that changes a promised behavior ([§4](#escalate-a-removal-that-changes-a-promise)).
67
+
68
+ **Relocate or rename.** Account for placement cost and find inbound references first ([§4 placement cost](#placement-cost-accounting)); a move is atomic. Confirm the destination tier from the taxonomy ([§4](#document-taxonomy)).
69
+
70
+ ## 2. Axis — proposition judgment
71
+
72
+ ### Preserve the complete proposition
73
+
74
+ Before editing, identify every proposition in the passage. Preserve each relevant:
75
+
76
+ - actor and action;
77
+ - condition, timing, and ordering;
78
+ - modality such as must, may, or never;
79
+ - negative guarantee and exception;
80
+ - ownership, side effect, failure mode, and consequence.
81
+
82
+ Remove adjectives, repetition, and narration **only when every factual clause survives and the result is clearer**. A smaller word count alone is not an improvement. When one sentence carries both narration and a load-bearing fact, delete the clause — not the sentence.
83
+
84
+ Keep a complete local contract at the point of use: behavior, failure, ownership, and consequence that a caller or maintainer needs *there*. Link aggressively to the owning document for architecture, rationale, algorithms, history, or extended examples. One explanation has one home; essential contract facts may repeat locally.
85
+
86
+ Keep non-obvious rationale when omitting it could plausibly cause misuse or an incorrect simplification. Otherwise state the consequence and link the rationale home.
87
+
88
+ ### Terminology discipline
89
+
90
+ Treat \`contract\`, \`boundary\`, \`shape\`, \`surface\`, \`seam\`, \`gate\`, and \`vocabulary\` as terms to check before use, not banned words. First ask whether the exact rule, API, field set, type, validation, timing point, component split, or failure states the fact better — write *response fields*, *JSON validation*, or *module exports* rather than *response shape*, *validation boundary*, or *module shape*. Keep a term when it names the exact technical subject, including caller/callee contracts and process or security boundaries.
91
+
92
+ Comments describe non-obvious contracts or rationale that code cannot express; they do not restate what code already implies.
93
+
94
+ ### Required coverage by prose location
95
+
96
+ This is **not** a one-way shortening pass. Add or restore prose when code, types, and structure do not communicate a required fact below. Do not add a comment when those facts are already obvious locally.
97
+
98
+ - **Public API documentation:** caller-visible return distinctions, throws or rejections, side effects, ownership, timing, cancellation, durability.
99
+ - **Internal comments:** non-local structure and obviously complicated local structure — invariants, race ordering, ownership, security boundaries, surprising failure behavior. Delete control-flow narration and code restatement.
100
+ - **Module comments:** the module's role, dependencies, responsibilities, and non-obvious architecture choices; link each architecture choice to its owning explanation.
101
+ - **Tests:** only non-obvious test design — why a fixture, assertion, platform accommodation, real entry path, or indirect observation is necessary. Delete walkthroughs and inventories.
102
+ - **How-to guides:** prerequisites, required actions, the real entry path, observable verification, concise warnings.
103
+ - **READMEs:** the consumer contract — configuration, semantics, failures, limitations, extension points, and model-visible effects. Quote stable model-visible text the component owns; link generated references and cross-component owners. Keep durable gaps and maintainer traps, not ordinary cleanup inventories.
104
+ - **Decision records** (ADR / RFC / design note): unique rationale, mechanisms, alternatives, consequences, shipped verification evidence, and named coverage gaps. A record describing shipped state uses the present tense; remove planning checklists, not the evidence of what pins the decision.
105
+ - **Incident reports:** the incident sequence, evidence, causal chain, impact, prevention. Remove repeated persuasion and implementation detail that does not establish causality.
106
+ - **Agent instructions and skills:** behavioral guardrails and explicit scope limitations such as "guidance, not a script". Keep the workflow concise and link its source of truth.
107
+ - **Examples and configuration comments:** access limits, non-obvious wiring or load order, security stance, replay behavior, exceptions, likely misuse. Do not narrate entries the configuration already shows.
108
+ - **Prompts and visible strings:** wording is behavior. Inspect the generated output and run behavior validation, or state why no validation applies.
109
+ - **Diagnostics:** the failing subject or path, the violated rule, and the correction when it is non-obvious. Remove internal execution narration.
110
+
111
+ Preserve searchable mechanism names and meaningful modal, temporal, or negative emphasis. Normalize decorative emphasis only.
112
+
113
+ ### Derivative artifacts are edited at their owner
114
+
115
+ *Applies when detection found generated artifacts.* Treat generated output, recorded snapshots, and recorded fixtures as derivative: edit the owning source or scenario, then regenerate. Never hand-edit a recorded snapshot or fixture. When a generator extracts a summary from owner prose, make the extracted fragment complete **for the surface it reaches** — knowing what the generator takes is part of writing the owner.
116
+
117
+ *Applies when detection found a pairing contract.* A translated pair has no permanent owner: either language may be the authored side for an update. Make the smallest counterpart edit that covers the change, then re-record the pair's consistency record.
118
+
119
+ ### Edit classification and reporting
120
+
121
+ Classify every candidate as **keep / add / trim / restore / restructure / defer**. Apply clear changes only when the task authorizes edits. **Do not manufacture edits to satisfy a deletion target.**
122
+
123
+ ### Borderline resolution
124
+
125
+ A case is borderline **only** when at least two versions satisfy the complete-proposition rule but trade accepted principles. A rewrite with one proposition-preserving answer is not borderline.
126
+
127
+ - \`automatic\`: apply clear edits when authorized; report genuine borderline cases without asking. Do not weaken a proposition to make progress.
128
+ - \`interactive\`: group analogous passages under the governing principle, present two or three viable versions, recommend one, and state the factual or structural difference. Do not offer inferior distractors. After the user decides, **report the principle and apply it to every analogous passage in scope** — this skill does not modify its own reference files.
129
+
130
+ Calibration for both: [references/examples.md](references/examples.md).
131
+
132
+ ## 3. Axis — vantage correction
133
+
134
+ Leakage is prose whose vantage is the authoring session rather than the repository: it cites artifacts only that session could see, narrates the change instead of the state, or argues with a reviewer who has left.
135
+
136
+ ### The one test
137
+
138
+ **Could a reader at the current commit, with no access to any session transcript, review thread, or uncommitted draft, resolve every reference and verify every claim?**
139
+
140
+ If no: restate the surviving facts from the repository's vantage, then delete the transcript around them. A passage carrying no factual clause (an audit code, control-flow narration) is deleted outright. If yes, it is not leakage, however historical it sounds — but resolvability only clears *this* axis: on a current-state surface (README, guide, API documentation) a resolvable change story is still change narration, and class 3 routes it to its sanctioned home.
141
+
142
+ The fix is never deletion alone when a passage carries factual clauses.
143
+
144
+ ### Taxonomy
145
+
146
+ 1. **Dead design-session citations** — decision ordinals, audit item codes, section numbers of uncommitted drafts, phase labels. If the decision has a committed owner, cite it by name and path; otherwise delete the citation and restate its factual clause to stand alone.
147
+ 2. **Stack and review-thread vantage** — "a later change in this series", "this change adds", "the previous commit". State the shipped mechanism or the extension point; deferred work moves to a tracking marker or an issue reference.
148
+ 3. **Change narration and version stamps** — "used to", "no longer", "the old X", and indexical stamps ("v1", "this release", "today", "now" contrasting with a past state). State the present behavior; a fixed regression becomes a present-tense counterfactual ("without X, Y happens"), never repository history.
149
+ 4. **Review choreography** — "rejected in review", "the reviewer confirmed", draft ordinals, round attributions. Keep the surviving decision and rationale as plain fact; delete who said it when.
150
+ 5. **Reviewer-addressed justification** — "the cast is safe — it simply…", "this is correct because…". A comment arguing its own correctness addresses a reviewer, not a maintainer. State the invariant that makes the code safe, or delete the comment if the code shows it.
151
+ 6. **Restatement and derivation transcripts** — control-flow narration, test walkthroughs, proofs of obvious branches. Delete; keep only a non-obvious contract or invariant.
152
+ 7. **Hedges and planning residue** — "probably fine for now", "should be enough", deferrals with no marker. Promote to a tracking marker or restate as the actual bound and its failure behavior; delete the hedge.
153
+ 8. **Authoring-language slips** — untranslated working-language fragments or session separators in prose whose language is otherwise consistent, or the reverse in a translated counterpart. Translate or delete.
154
+
155
+ ### What is not leakage
156
+
157
+ An unaided pass fails in **both** directions — deleting durable references and keeping dead ones. Apply these keeps as written:
158
+
159
+ - **Issue references and tracking markers** — they resolve at the current commit; keep them on any surface, including READMEs. Do not relocate them into decision records.
160
+ - **Merged-change and issue citations inside decision records and incident reports** — sanctioned evidence in those genres.
161
+ - **Suppression justifications** — linter and coverage-ignore directives, empty-catch explanations. The reason clause is required prose; fix a false reason, never delete it.
162
+ - **Counterfactual-present regression pins** — "without X, Y happens", "a naive X would…".
163
+ - **Measured bounds** — the provenance word ("measured") is load-bearing; without it a number reads as a definition and nobody re-measures.
164
+ - **Runtime old/new states** — "the old connection drains before the new one accepts" is lifecycle vocabulary naming two live objects, not change history.
165
+ - **Historical stage names inside a decision record's change-story sections** — current-state-safe there; indexical stamps stay banned everywhere.
166
+ - **External references that resolve outside the repository by design** — published standard sections, design-tool frame names. The section-number ban covers uncommitted internal drafts, not external standards or committed documents that own their numbering.
167
+ - **Project voice and genre forms** — "we" as project voice; a record's alternatives-considered section.
168
+
169
+ ### Hunting and repair
170
+
171
+ Search patterns, invocation rules, and known false-positive families: [references/recall-batteries.md](references/recall-batteries.md). Audit read-only first, then judge every hit semantically — the batteries over-match by design and under-match by nature, so also read the densest prose in scope (module documentation, READMEs, decision records) with no pattern in hand.
172
+
173
+ Repair at the owning surface: generated output → fix the source or template, then regenerate; verbatim excerpts → fix the source they were copied from; translated pairs → update the counterpart and re-record; model-facing strings → wording is behavior, so flag a validated change instead of silently rewording.
174
+
175
+ ### Overcorrection traps
176
+
177
+ Before deleting anything, enumerate the passage's propositions and check these four:
178
+
179
+ - **Flipping an obligation into an endorsement** — "exceptions pending migration" must not become "sanctioned exceptions".
180
+ - **Promoting a hypothetical to a shipped feature** — deleting a future marker alone turns a design illustration into a claim; mark the hypothetical explicitly instead.
181
+ - **Deleting a true fact with the transcript around it** — delete clauses, not sentences, when propositions share a line.
182
+ - **Dropping provenance while keeping the number** — keep the word that identifies an observation as measured.
183
+
184
+ ## 4. Axis — structural placement
185
+
186
+ ### Structural review precedes prose
187
+
188
+ Apply this to every human-facing document in scope. **Do not** apply it to decision records. Classify an incident report as a reference scoped to one incident, preserving its chronological evidence without treating the chronology as a teaching sequence.
189
+
190
+ 1. **Locate** the document in the repository and navigation trees. State its own subject and identify its direct children.
191
+ 2. **Set the permitted detail.** Keep full detail about the document's subject, summarize direct children by purpose, responsibility, and high-level behavior, and move deeper explanations to their owning descendants with links. Treat test infrastructure as descendant-owned unless it is the document's subject.
192
+ 3. **Classify from intended use**, not path or title. A tutorial must lead through ordered work to an observable outcome; a reference must support lookup within an explicit scope without requiring sequential reading.
193
+ 4. **For a tutorial**, privately classify the starting reader and each concept as beginner, intermediate, or advanced. Trace each concept to its prerequisites, reorder premature material, and move optional advanced detail to a later tutorial or reference.
194
+ 5. **Split substantial mixed forms.** Put a small secondary form in a clearly labeled section.
195
+
196
+ ### Placement cost accounting
197
+
198
+ Then check the constraints that make a placement expensive or wrong:
199
+
200
+ - *When a pairing contract exists:* a paired home charges a counterpart update and a consistency re-record on **every** edit — prefer an unpaired home for content that will churn.
201
+ - Generated files are never hand-edited; if the fact belongs there, change the generator's source.
202
+ - **Before renaming or moving, find every inbound reference.** A detected reference checker covers documentation links and anchors onto them; a reference embedded in source code or a runtime string whose output never reaches scanned prose still needs a manual search.
203
+ - **A move is atomic:** remove from the old home, add to the new home, and fix every inbound reference in the same change.
204
+
205
+ ### Corpus audit (cheapest probe first)
206
+
207
+ Establish the changed scope first (a base reference is required — never guess or fetch one), then:
208
+
209
+ 1. **Measure.** Rank documents by size to spot outliers.
210
+ 2. **Hunt leakage** with [§3](#3-axis--vantage-correction). Preserve only a non-obvious contract or durable rationale; the same rationale repeated beside sibling declarations keeps one home at the owning declaration.
211
+ 3. **Hunt duplication** by searching distinctive phrases. Keep one home and replace other copies with links.
212
+ 4. **Replace hand-written catalogs, inventories, and documentation restatements** with the authoritative tree, script, or generated reference.
213
+ 5. **Clean shipped decision records:** remove migration plans, acceptance-task checklists, and future-tense specification language. Keep concise verification contracts identifying the behaviors and tiers that pin the decision, plus named coverage gaps.
214
+
215
+ After a base change, rerun the scope report and audit prose introduced by the new base.
216
+
217
+ Keep every load-bearing rule, preferably as one to three lines plus a link to its rationale. Cut stories, duplicates, status annotations, and the derivation path used to reach the rule. **Do not create a new explanation merely to relocate disposable reasoning.**
218
+
219
+ ### Escalate a removal that changes a promise
220
+
221
+ Removing an *explanation* is this axis's job. Removing a *promised behavior* is not: escalate it to the host's decision-record process. Here that destination is \`openspec/changes/<name>/\` — record the removal and its rationale in that change's design.md.
222
+
223
+ ### Document taxonomy
224
+
225
+ Use the host project's own taxonomy when it declares one. When it does not, apply this default and **say that you did**:
226
+
227
+ | Tier | Job | Does not belong there |
228
+ |---|---|---|
229
+ | Standing agent instructions | Rules needed in every session, one to three lines each, linking their home | Stories, worked examples, anything restated from a linked home |
230
+ | Architecture overview | Composition, components, control flow, extension points | Type definitions, per-component detail, decision rationale |
231
+ | Per-component reference | Type definitions, semantics, generated API | Behavior narration |
232
+ | Decision records | The why, what was given up, required verification; shipped records in present tense | Migration plans, acceptance checklists, specification language after shipping |
233
+ | Incident reports | Incident narrative — the one tier where a war story belongs | — |
234
+ | How-to guides | Step-by-step procedures with verification steps | Design rationale |
235
+ | Consumer-facing guides | Product-facing usage | Generated reference tables, contributor procedures, decision history |
236
+ | Component README | The component contract: configuration, semantics, limitations, extension points | Restatement of API documentation or generated tables, other components' concerns |
237
+ | Contributor setup | Setup, daily workflow, a summary of automated checks | Runtime rationale, check-by-check lists that drift from the scripts |
238
+ | Generated reference | Exhaustive material regenerated from source | Hand edits |
239
+
240
+ Each fact has one home: the tier whose job it is. Elsewhere, link there.
241
+
242
+ ### Size policy
243
+
244
+ No numeric ceilings live here — they are properties of one corpus. When a host-defined limit is exceeded, apply this order:
245
+
246
+ 1. **Relocate** content that belongs in another tier; leave a one-line link if needed.
247
+ 2. **Condense** content that belongs here but can be shorter.
248
+ 3. **Raise** the limit only when the content needs the space, and justify it.
249
+
250
+ Limits are guardrails, not reduction targets. When the host defines no limit, report outliers by measured size and apply the same order without asserting a threshold. A long document whose content is load-bearing and correctly placed is a deliberate exception, not a defect.
251
+
252
+ ## 5. Report and validation
253
+
254
+ ### Workflow
255
+
256
+ 1. Confirm the scope, mode, and the host's applicable instruction files. Do not inspect unrelated branches.
257
+ 2. Read the host standard when detection found one; otherwise apply §4's default taxonomy. **Read the owning code or document before judging a passage.**
258
+ 3. Inspect the requested scope, not only the largest files. Use searches and size measurements to find candidates, then judge passages semantically.
259
+ 4. Classify each candidate (§2). Apply clear changes only when the task authorizes edits.
260
+ 5. Update the owner before derivative artifacts. Re-check analogous passages after learning a new rule.
261
+ 6. Run the host's detected documentation checks plus the version-control formatting check. Verify the final change set contains no excluded path.
262
+ 7. Report.
263
+
264
+ ### Report contents
265
+
266
+ - the inspected scope;
267
+ - applied or proposed changes, by classification;
268
+ - **deliberate keeps** — what was inspected and correctly left alone;
269
+ - deferred and genuine borderline cases;
270
+ - size deltas and any deliberately long exception;
271
+ - **the exact commands run**;
272
+ - **every uncovered dimension**: name it, why it was uncovered, and what the host would need for coverage.
273
+
274
+ ### Coverage honesty
275
+
276
+ This skill establishes **semantic** properties. By itself it does not check reference existence, formatting, derivative freshness, or structural constraints — a detected host capability does that. When asked whether the documentation is verified, distinguish the semantic properties you judged from the mechanical properties no detected capability checked. Never claim a check passed when none was detected or executed. When a detected check fails after your edits, report the failure and do not present the change as validated.
277
+ `;
278
+ }
279
+ //# sourceMappingURL=fusedoc-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fusedoc-skill.js","sourceRoot":"","sources":["../../src/templates/fusedoc-skill.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmRR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-specfuse",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Scaffold projects with OpenSpec + Superpowers fusion methodology",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,7 +8,6 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
- "bin",
12
11
  "README.md"
13
12
  ],
14
13
  "engines": {
@@ -18,6 +17,7 @@
18
17
  "build": "rm -rf dist && tsc && for d in src/*/templates; do [ -d \"$d\" ] || continue; m=$(dirname \"$d\"); mkdir -p \"dist/${m#src/}\"; mkdir -p \"dist/${m#src/}/templates\" && cp -r \"$d/.\" \"dist/${m#src/}/templates/\"; done",
19
18
  "samples": "npx tsx scripts/generate-samples.ts",
20
19
  "test": "vitest run",
20
+ "lint": "eslint .",
21
21
  "dev": "tsc --watch"
22
22
  },
23
23
  "dependencies": {
@@ -29,8 +29,12 @@
29
29
  "zod": "^3.24.0"
30
30
  },
31
31
  "devDependencies": {
32
+ "@eslint/js": "^10.0.1",
32
33
  "@types/node": "^22.0.0",
34
+ "eslint": "^10.10.0",
35
+ "prettier": "^3.9.6",
33
36
  "typescript": "^5.8.0",
37
+ "typescript-eslint": "^8.70.0",
34
38
  "vitest": "^3.2.0"
35
39
  },
36
40
  "keywords": [
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import '../dist/index.js';