skillwiki 0.10.63 → 0.10.65

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.
@@ -8,7 +8,7 @@ import {
8
8
  ok,
9
9
  scanSensitiveContent,
10
10
  scanVault
11
- } from "./chunk-SI6DDQIV.js";
11
+ } from "./chunk-HJ4ALQG6.js";
12
12
 
13
13
  // src/utils/atomic-write.ts
14
14
  import { randomBytes } from "crypto";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  atomicWriteText,
4
4
  buildRootIndexUniverse
5
- } from "./chunk-EFPIN7DQ.js";
5
+ } from "./chunk-BPJ5KWIT.js";
6
6
  import {
7
7
  authorizeRawOperation,
8
8
  buildSourceReferenceIndex,
@@ -22,7 +22,7 @@ import {
22
22
  resolveExistingRegularFileInsideVault,
23
23
  stripFencedBlocks,
24
24
  writeLogEvent
25
- } from "./chunk-Q66UASXZ.js";
25
+ } from "./chunk-OMO45AHI.js";
26
26
  import {
27
27
  ExitCode,
28
28
  FleetManifestSchema,
@@ -41,7 +41,7 @@ import {
41
41
  scanVault,
42
42
  splitFrontmatter,
43
43
  vaultIoConcurrency
44
- } from "./chunk-SI6DDQIV.js";
44
+ } from "./chunk-HJ4ALQG6.js";
45
45
 
46
46
  // src/utils/managed-write-preflight.ts
47
47
  import { existsSync as existsSync11 } from "fs";
@@ -176,6 +176,16 @@ var RawSourceSchema = z.object({
176
176
  ctx.addIssue({ code: z.ZodIssueCode.custom, message: "project and kind are required when work_item is set" });
177
177
  }
178
178
  });
179
+ var PostReleaseVerificationSchema = z.object({
180
+ posture: z.literal("opt-in"),
181
+ triggers: z.array(z.enum([
182
+ "matching-regression-report",
183
+ "explicit-user-request",
184
+ "relevant-code-or-release-change"
185
+ ])).min(1),
186
+ last_proven: isoDate.optional(),
187
+ evidence: z.array(z.string().min(1)).optional()
188
+ }).strict();
179
189
  var WorkItemSchema = z.object({
180
190
  title: z.string().min(1),
181
191
  aliases: z.array(z.string()).optional(),
@@ -190,11 +200,19 @@ var WorkItemSchema = z.object({
190
200
  owner: wikilink.optional(),
191
201
  parent: wikilink.optional(),
192
202
  related: z.array(wikilink).optional(),
193
- sources: z.array(z.string()).optional()
203
+ sources: z.array(z.string()).optional(),
204
+ post_release_verification: PostReleaseVerificationSchema.optional()
194
205
  }).superRefine((v, ctx) => {
195
206
  if (v.status === "completed" && !v.completed) {
196
207
  ctx.addIssue({ code: z.ZodIssueCode.custom, path: ["completed"], message: "required when status is completed" });
197
208
  }
209
+ if (v.post_release_verification && v.status !== "completed") {
210
+ ctx.addIssue({
211
+ code: z.ZodIssueCode.custom,
212
+ path: ["post_release_verification"],
213
+ message: "post-release verification requires status completed"
214
+ });
215
+ }
198
216
  });
199
217
  var CompoundSchema = z.object({
200
218
  title: z.string().min(1),
@@ -3,11 +3,11 @@ import {
3
3
  ROOT_INDEX_SECTION_ORDER,
4
4
  atomicWriteText,
5
5
  buildRootIndexUniverse
6
- } from "./chunk-EFPIN7DQ.js";
6
+ } from "./chunk-BPJ5KWIT.js";
7
7
  import {
8
8
  err,
9
9
  ok
10
- } from "./chunk-SI6DDQIV.js";
10
+ } from "./chunk-HJ4ALQG6.js";
11
11
 
12
12
  // src/utils/index-projection.ts
13
13
  import { readFile } from "fs/promises";
@@ -8,7 +8,7 @@ import {
8
8
  readLogEvents,
9
9
  resolveExistingRegularFileInsideVault,
10
10
  writeLogEvent
11
- } from "./chunk-Q66UASXZ.js";
11
+ } from "./chunk-OMO45AHI.js";
12
12
  import {
13
13
  ExitCode,
14
14
  RawSourceSchema,
@@ -19,7 +19,7 @@ import {
19
19
  scanSensitiveContent,
20
20
  scanVault,
21
21
  splitFrontmatter
22
- } from "./chunk-SI6DDQIV.js";
22
+ } from "./chunk-HJ4ALQG6.js";
23
23
 
24
24
  // src/commands/sources.ts
25
25
  import { readFile as readFile4 } from "fs/promises";
@@ -6,7 +6,7 @@ import {
6
6
  readPage,
7
7
  scanSensitiveContent,
8
8
  splitFrontmatter
9
- } from "./chunk-SI6DDQIV.js";
9
+ } from "./chunk-HJ4ALQG6.js";
10
10
 
11
11
  // src/utils/vault-path-safety.ts
12
12
  import { lstatSync, realpathSync } from "fs";
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  renderRootIndex,
8
8
  writeRootIndexProjection
9
- } from "./chunk-MDLROHRP.js";
9
+ } from "./chunk-KFEOMMWK.js";
10
10
  import {
11
11
  CONFIG_KEYS,
12
12
  VAULT_HYGIENE_GENERATED_COMMIT_PATHS,
@@ -40,11 +40,11 @@ import {
40
40
  snapshotterAliasForLocalHost,
41
41
  toUndirectedWeighted,
42
42
  writeDotenv
43
- } from "./chunk-X45H2KXI.js";
43
+ } from "./chunk-CKDF4DWU.js";
44
44
  import {
45
45
  atomicWriteText,
46
46
  prepareTypedPage
47
- } from "./chunk-EFPIN7DQ.js";
47
+ } from "./chunk-BPJ5KWIT.js";
48
48
  import {
49
49
  applySourceCompileClaim,
50
50
  applySourceCompilePublished,
@@ -57,11 +57,11 @@ import {
57
57
  planSourceCompileRelease,
58
58
  planSourceReview,
59
59
  runSourcesPending
60
- } from "./chunk-S663QZQR.js";
60
+ } from "./chunk-NPTIYO2S.js";
61
61
  import {
62
62
  eventPathFor,
63
63
  writeLogEvent
64
- } from "./chunk-Q66UASXZ.js";
64
+ } from "./chunk-OMO45AHI.js";
65
65
  import {
66
66
  CompoundSchema,
67
67
  ExitCode,
@@ -82,7 +82,7 @@ import {
82
82
  scanVault,
83
83
  splitFrontmatter,
84
84
  systemdPropertyFor
85
- } from "./chunk-SI6DDQIV.js";
85
+ } from "./chunk-HJ4ALQG6.js";
86
86
 
87
87
  // src/commands/log-append.ts
88
88
  import { readFile, stat } from "fs/promises";
@@ -6096,7 +6096,7 @@ async function runQuery(input) {
6096
6096
  }
6097
6097
  let pendingSources;
6098
6098
  if (input.includePending) {
6099
- const { runSourcesPending: runSourcesPending2 } = await import("./sources-LP76JPY5.js");
6099
+ const { runSourcesPending: runSourcesPending2 } = await import("./sources-C4LUWNET.js");
6100
6100
  const pending = await runSourcesPending2({
6101
6101
  vault: input.vault,
6102
6102
  match: input.text,
package/dist/cli.js CHANGED
@@ -50,7 +50,7 @@ import {
50
50
  snapshotterHealthChecks,
51
51
  upsertIndexEntry,
52
52
  vectorIndexStatus
53
- } from "./chunk-4JZD2IAC.js";
53
+ } from "./chunk-SNHTWLGF.js";
54
54
  import {
55
55
  normalizeDistTag,
56
56
  readCache,
@@ -63,7 +63,7 @@ import {
63
63
  UNMANAGED_START,
64
64
  renderRootIndex,
65
65
  writeRootIndexProjection
66
- } from "./chunk-MDLROHRP.js";
66
+ } from "./chunk-KFEOMMWK.js";
67
67
  import {
68
68
  FLEET_REL_PATH,
69
69
  REDACTED_MALFORMED_REFERENCE,
@@ -151,12 +151,12 @@ import {
151
151
  supersedeStaleReviewRequiredJournals,
152
152
  taxonomyCommentForPage,
153
153
  writeDotenv
154
- } from "./chunk-X45H2KXI.js";
154
+ } from "./chunk-CKDF4DWU.js";
155
155
  import {
156
156
  assertTargetInsideVault,
157
157
  atomicWriteText,
158
158
  prepareTypedPage
159
- } from "./chunk-EFPIN7DQ.js";
159
+ } from "./chunk-BPJ5KWIT.js";
160
160
  import {
161
161
  applySourceDisposition,
162
162
  decodeSourceActionApproval,
@@ -164,7 +164,7 @@ import {
164
164
  inventorySources,
165
165
  planSourceDisposition,
166
166
  runSourcesPending
167
- } from "./chunk-S663QZQR.js";
167
+ } from "./chunk-NPTIYO2S.js";
168
168
  import {
169
169
  authorizeRawOperation,
170
170
  buildSourceReferenceIndex,
@@ -181,7 +181,7 @@ import {
181
181
  resolveExistingRegularFileInsideVault,
182
182
  validateLogEvent,
183
183
  writeLogEvent
184
- } from "./chunk-Q66UASXZ.js";
184
+ } from "./chunk-OMO45AHI.js";
185
185
  import {
186
186
  ExitCode,
187
187
  MetaSchema,
@@ -202,7 +202,7 @@ import {
202
202
  scanVault,
203
203
  splitFrontmatter,
204
204
  vaultIoConcurrency
205
- } from "./chunk-SI6DDQIV.js";
205
+ } from "./chunk-HJ4ALQG6.js";
206
206
 
207
207
  // src/cli.ts
208
208
  import { join as join42 } from "path";
@@ -3767,7 +3767,7 @@ ${fmRewritten}
3767
3767
  }
3768
3768
  let indexUpdated = false;
3769
3769
  if (!isRaw) {
3770
- const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-LUXJDMUG.js");
3770
+ const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-J5IV7NH3.js");
3771
3771
  const before = await readFile7(join19(input.vault, "index.md"), "utf8").catch(() => "");
3772
3772
  const fullTarget = relPath.replace(/\.md$/, "");
3773
3773
  const bare = fullTarget.split("/").pop() ?? fullTarget;
@@ -3890,7 +3890,7 @@ async function runRemove(input) {
3890
3890
  if (relPath.endsWith(".md") && !relPath.startsWith("raw/")) {
3891
3891
  const { readFile: readFile22 } = await import("fs/promises");
3892
3892
  const { join: pathJoin } = await import("path");
3893
- const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-LUXJDMUG.js");
3893
+ const { renderRootIndex: renderRootIndex2, writeRootIndexProjection: writeRootIndexProjection2 } = await import("./index-projection-J5IV7NH3.js");
3894
3894
  const before = await readFile22(pathJoin(input.vault, "index.md"), "utf8").catch(() => "");
3895
3895
  const fullTarget = relPath.replace(/\.md$/, "");
3896
3896
  const bare = fullTarget.split("/").pop() ?? fullTarget;
@@ -10410,7 +10410,7 @@ async function emitManagedVaultWrite(vault, command, mutate, opts) {
10410
10410
  if (dirty) {
10411
10411
  return emit(dirty, void 0, { postCommit: false });
10412
10412
  }
10413
- const { runManagedWriteTransaction: runManagedWriteTransaction2 } = await import("./managed-write-preflight-GQN7ZW7O.js");
10413
+ const { runManagedWriteTransaction: runManagedWriteTransaction2 } = await import("./managed-write-preflight-2MMVUXD3.js");
10414
10414
  const run = await runManagedWriteTransaction2({
10415
10415
  vault,
10416
10416
  command,
@@ -4,9 +4,9 @@ import {
4
4
  UNMANAGED_START,
5
5
  renderRootIndex,
6
6
  writeRootIndexProjection
7
- } from "./chunk-MDLROHRP.js";
8
- import "./chunk-EFPIN7DQ.js";
9
- import "./chunk-SI6DDQIV.js";
7
+ } from "./chunk-KFEOMMWK.js";
8
+ import "./chunk-BPJ5KWIT.js";
9
+ import "./chunk-HJ4ALQG6.js";
10
10
  export {
11
11
  UNMANAGED_END,
12
12
  UNMANAGED_START,
@@ -6,10 +6,10 @@ import {
6
6
  runManagedWritePeerGate,
7
7
  runManagedWritePreflight,
8
8
  runManagedWriteTransaction
9
- } from "./chunk-X45H2KXI.js";
10
- import "./chunk-EFPIN7DQ.js";
11
- import "./chunk-Q66UASXZ.js";
12
- import "./chunk-SI6DDQIV.js";
9
+ } from "./chunk-CKDF4DWU.js";
10
+ import "./chunk-BPJ5KWIT.js";
11
+ import "./chunk-OMO45AHI.js";
12
+ import "./chunk-HJ4ALQG6.js";
13
13
  export {
14
14
  DEFAULT_MANAGED_WRITE_WAIT_MS,
15
15
  MANAGED_WRITE_POLL_INTERVAL_MS,
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runSkillwikiMcpStdio
4
- } from "./chunk-4JZD2IAC.js";
4
+ } from "./chunk-SNHTWLGF.js";
5
5
  import "./chunk-7I2TPIV5.js";
6
- import "./chunk-MDLROHRP.js";
7
- import "./chunk-X45H2KXI.js";
8
- import "./chunk-EFPIN7DQ.js";
9
- import "./chunk-S663QZQR.js";
10
- import "./chunk-Q66UASXZ.js";
11
- import "./chunk-SI6DDQIV.js";
6
+ import "./chunk-KFEOMMWK.js";
7
+ import "./chunk-CKDF4DWU.js";
8
+ import "./chunk-BPJ5KWIT.js";
9
+ import "./chunk-NPTIYO2S.js";
10
+ import "./chunk-OMO45AHI.js";
11
+ import "./chunk-HJ4ALQG6.js";
12
12
 
13
13
  // src/mcp-entry.ts
14
14
  runSkillwikiMcpStdio().catch((error) => {
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ runSourcesPending
4
+ } from "./chunk-NPTIYO2S.js";
5
+ import "./chunk-OMO45AHI.js";
6
+ import "./chunk-HJ4ALQG6.js";
7
+ export {
8
+ runSourcesPending
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.63",
3
+ "version": "0.10.65",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "skillwiki": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.63",
3
+ "version": "0.10.65",
4
4
  "skills": "./",
5
5
  "description": "Project-aware Karpathy-style knowledge base for Claude Code: 20 prompt-only skills (wiki-*, proj-*, using-skillwiki) backed by the deterministic `skillwiki` CLI.",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.63",
3
+ "version": "0.10.65",
4
4
  "description": "Project-aware Karpathy-style knowledge base for Codex with 20 prompt-only skills backed by the deterministic skillwiki CLI.",
5
5
  "author": {
6
6
  "name": "karlorz",
package/skills/README.md CHANGED
@@ -38,6 +38,12 @@ Each top-level skill subdirectory holds one canonical `SKILL.md`. The nested
38
38
  `skills/<skill>/SKILL.md` tree mirrors those files for Codex plugin discovery;
39
39
  keep it byte-for-byte in sync with the canonical top-level files.
40
40
 
41
+ `description` is routing metadata for every skill, not a README. Author to
42
+ 180 characters (CI fails above 220). Unique-canonical totals are capped with
43
+ agent-skills so the combined Codex catalog stays at 8,000 characters. See
44
+ vault concept `concepts/codex-skill-catalog-budget.md`. Run
45
+ `python3 scripts/lint-skill-descriptions.py --layout llm-wiki --max-total-chars 3200`.
46
+
41
47
  Codex installs through `packages/codex-skills`, a materialized plugin root that
42
48
  copies this package's `.codex-plugin/` manifest, `skills/` mirror, and
43
49
  Codex-specific hook files. That root exposes `hooks/hooks-codex.json` and
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillwiki/skills",
3
- "version": "0.10.63",
3
+ "version": "0.10.65",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -49,6 +49,22 @@ When the user asks to "get work of X" or "run work item Y" for review, you are i
49
49
  5. Manage status transitions: `planned` → `in-progress` → `completed` (set `completed:` date) or `abandoned`.
50
50
  6. Append vault `log.md` entry on creation and on each status transition.
51
51
 
52
+ ### Completion and post-release verification
53
+
54
+ - Work-item status represents delivery lifecycle. Mark delivery complete when
55
+ the approved code, required acceptance checks, release/deployment scope, and
56
+ completion evidence are finished.
57
+ - Required acceptance verification remains part of the completion checklist and
58
+ must pass before `status: completed`.
59
+ - Optional verification after delivery uses typed frontmatter:
60
+ `post_release_verification.posture: opt-in`, plus one or more approved
61
+ `triggers` (`matching-regression-report`, `explicit-user-request`, or
62
+ `relevant-code-or-release-change`).
63
+ - Record opt-in post-release checks as prose evidence, not as unchecked completion tasks.
64
+ Completed opt-in work stays out of ordinary active rankings until a trigger
65
+ occurs; a trigger creates new evidence or a follow-up decision rather than
66
+ silently keeping delivered work `in-progress`.
67
+
52
68
  ## Redirect Output
53
69
 
54
70
  After step 3 (output path override), emit redirect paths for the active PRD skill:
@@ -49,6 +49,22 @@ When the user asks to "get work of X" or "run work item Y" for review, you are i
49
49
  5. Manage status transitions: `planned` → `in-progress` → `completed` (set `completed:` date) or `abandoned`.
50
50
  6. Append vault `log.md` entry on creation and on each status transition.
51
51
 
52
+ ### Completion and post-release verification
53
+
54
+ - Work-item status represents delivery lifecycle. Mark delivery complete when
55
+ the approved code, required acceptance checks, release/deployment scope, and
56
+ completion evidence are finished.
57
+ - Required acceptance verification remains part of the completion checklist and
58
+ must pass before `status: completed`.
59
+ - Optional verification after delivery uses typed frontmatter:
60
+ `post_release_verification.posture: opt-in`, plus one or more approved
61
+ `triggers` (`matching-regression-report`, `explicit-user-request`, or
62
+ `relevant-code-or-release-change`).
63
+ - Record opt-in post-release checks as prose evidence, not as unchecked completion tasks.
64
+ Completed opt-in work stays out of ordinary active rankings until a trigger
65
+ occurs; a trigger creates new evidence or a follow-up decision rather than
66
+ silently keeping delivered work `in-progress`.
67
+
52
68
  ## Redirect Output
53
69
 
54
70
  After step 3 (output path override), emit redirect paths for the active PRD skill:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: using-skillwiki
3
- description: Invoke when vault, wiki, knowledge-base, or SkillWiki setup work arises — maps skillwiki skills, dev-loop alignment, adaptive workflow profiles, and vault routing. Do not invoke for unrelated coding or creative tasks.
3
+ description: Invoke for vault, wiki, or SkillWiki setup. Maps skills, workflow profiles, and vault routing. Skip unrelated coding.
4
4
  ---
5
5
  *Note: If executing as a background subagent, skip this skill section.*
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-freshness-repair
3
- description: Repair stale vault sources end to end. Consumes skillwiki drift --affected-pages, re-ingests changed sources through wiki-reingest, then republishes the affected typed pages through the page publish approval flow. Attended only; never auto-repairs.
3
+ description: Repair stale vault sources via drift, reingest, and attended republish. Use when skillwiki drift lists affected pages.
4
4
  ---
5
5
 
6
6
  # wiki-freshness-repair
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-sync
3
- description: Safely sync the vault git repository multi-session safe via advisory lockfile. Handles rebase conflict storms from archive-commit × snapshot-stream patterns. Runs skillwiki sync status, then guides push or pull with lint guards and conflict resolution.
3
+ description: Safely sync vault git with a lockfile and lint guards. Use to push or pull wiki changes across sessions.
4
4
  ---
5
5
  # wiki-sync
6
6
  ## When This Skill Activates
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: using-skillwiki
3
- description: Invoke when vault, wiki, knowledge-base, or SkillWiki setup work arises — maps skillwiki skills, dev-loop alignment, adaptive workflow profiles, and vault routing. Do not invoke for unrelated coding or creative tasks.
3
+ description: Invoke for vault, wiki, or SkillWiki setup. Maps skills, workflow profiles, and vault routing. Skip unrelated coding.
4
4
  ---
5
5
  *Note: If executing as a background subagent, skip this skill section.*
6
6
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-freshness-repair
3
- description: Repair stale vault sources end to end. Consumes skillwiki drift --affected-pages, re-ingests changed sources through wiki-reingest, then republishes the affected typed pages through the page publish approval flow. Attended only; never auto-repairs.
3
+ description: Repair stale vault sources via drift, reingest, and attended republish. Use when skillwiki drift lists affected pages.
4
4
  ---
5
5
 
6
6
  # wiki-freshness-repair
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-sync
3
- description: Safely sync the vault git repository multi-session safe via advisory lockfile. Handles rebase conflict storms from archive-commit × snapshot-stream patterns. Runs skillwiki sync status, then guides push or pull with lint guards and conflict resolution.
3
+ description: Safely sync vault git with a lockfile and lint guards. Use to push or pull wiki changes across sessions.
4
4
  ---
5
5
  # wiki-sync
6
6
  ## When This Skill Activates
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- runSourcesPending
4
- } from "./chunk-S663QZQR.js";
5
- import "./chunk-Q66UASXZ.js";
6
- import "./chunk-SI6DDQIV.js";
7
- export {
8
- runSourcesPending
9
- };